iOS/GLES2:如何以编程方式确定最大可用纹理单位?
确定最大纹理大小没有问题:iOS/GLES2:如何以编程方式确定最大可用纹理单位?,ios,textures,opengl-es-2.0,max,Ios,Textures,Opengl Es 2.0,Max,确定最大纹理大小没有问题: 此外,文档还指定了片段着色器可以处理的最大采样器数量 该链接在标题下指定 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 ); gl
此外,文档还指定了片段着色器可以处理的最大采样器数量 该链接在标题下指定 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 );
命令+点击GL_TEXTURE1会显示常量,一直到GL_TEXTURE31,所以看起来他们在为未来几代人做准备
但是我在哪里可以找到可以创建的最大数量的纹理
glGenTextures( n, pTexID ); // what is max n?
这是否仅受设备上视频可用内存的物理量限制?(我读到VRAM和RAM之间没有实际的物理区别,它是相同的内存)。或者可以保证某个下限吗?我在这里找到了一个答案:
基本上它说你只受记忆的限制。因此,不可能给出安全最大值。您必须检查每次是否成功创建纹理。没错,创建纹理对象的数量
glGenTextures()
只受记忆的约束
顺便说一句,可以在运行时使用
int num_texture_units;
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &num_texture_units);