iOS / GLES2:如何以编程方式确定最大可用纹理单位?

时间:2011-06-28 10:18:33

标签: ios textures opengl-es-2.0 max

确定最大纹理大小没问题: How to detect maximum texture resolution on iPhone?


此外,文档指定了片段着色器可以处理的最大采样器数,here

该链接指定在标题

  

PowerVR SGX上的OpenGL ES 2.0
      您可以在片段着色器中使用最多8个纹理

你加载纹理,例如:

// bind gem texture to slot #0, and inform shader via uniform
glActiveTexture( GL_TEXTURE0 );
glBindTexture( GL_TEXTURE_2D, texId_dull );
glUniform1i( [ self.program idForUniform: "U1_sampId_Gem" ],  (GLuint)0 );

// ... similarly for texture #1
glActiveTexture( GL_TEXTURE1 );
glBindTexture( GL_TEXTURE_2D, texId_sparkle );
glUniform1i( [ self.program idForUniform: "U2_sampId_Sparkle" ],  (GLuint)1 );

和COMMAND +点击GL_TEXTURE1显示常量到GL_TEXTURE31,所以看起来它们正在准备好几代。


但是我在哪里可以找到可以创建的最大纹理数。

glGenTextures( n, pTexID ); // what is max n?

这仅限于设备上可用于视频的物理内存量吗? (我读过VRAM和RAM之间没有实际的物理区别,它是相同的内存)。或者可以保证一些下限?

2 个答案:

答案 0 :(得分:2)

这是正确的,由

创建的纹理对象的数量
glGenTextures()

仅受记忆约束。

纹理单元的数量(硬件上的8个)可以顺便说一句。在运行时使用

进行查询
int num_texture_units;
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &num_texture_units);

答案 1 :(得分:0)

我刚刚在这里找到答案:

glGenTextures - is there a limit to the number of textures?

基本上它说你只受记忆的限制。所以不可能给出安全的最大值。您必须检查每次是否成功创建纹理。