iPhone上的OpenGL ES 2.0 - 我可以使用多少个纹理单元?

6
3个回答

9

与其在将来询问并获得可能正确或不正确的答案,您的应用程序应该在运行时通过编程方式进行检查,例如:

glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &MaxTextureUnits);

注意,顶点着色器和片元着色器允许使用的纹理单元数量也是分开计算的。它们分别使用常量 GL_MAX_VERTEX_TEXTURE_IMAGE_UNITSGL_MAX_TEXTURE_IMAGE_UNITS。而COMBINED表示两者同时可用的数量。


在 iOS 上,gl.h 中未定义 GL_MAX_TEXTURE_UNITS。 - Or Arbel
3
抱歉,在ES 2.0中,它是GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS - user1118321
4
实际上,存在 GL_MAX_VERTEX_TEXTURE_IMAGE_UNITSGL_MAX_TEXTURE_IMAGE_UNITSGL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 枚举值。第一个用于计算允许在顶点着色器中使用的纹理单元数量,第二个用于片段着色器,第三个则合并了两者。 - Mārtiņš Možeiko

2
这段话的意思是:

在苹果公司的iOS设备兼容性参考中,列出了所有iPhone和iPad上的硬件详细列表。

根据这个列表,你可以在任何 iOS 设备上使用8个纹理单元,是安全的。


1
有用的答案 - 知道最小期望值很好,而不仅仅是运行时的任意数字,因为它可能会影响我们着色器的核心设计。 - Joseph Humfrey

0

实际上,答案就在你在问题中链接的同一页:

PowerVR SGX 上的 OpenGL ES 2.0

限制

...

您可以在片段着色器中使用最多8个纹理。您不能在顶点着色器中使用纹理查找。

....


“你可以在片段着色器中使用多达8个纹理”,这并不等同于最大纹理单元数。我可以在多个片段着色器中使用更多纹理。 - Or Arbel
1
如果我使用两个片段着色器会怎样?我能够将16个纹理单元加载到内存中吗? - Or Arbel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接