根据苹果对OpenGL ES 2.0限制的文档:"You can use up to 8 textures in a fragment shader."
这看起来并不是非常具体,所以我假设它意味着“您可以为片段着色器的每个过程引用最多8个纹理单元。”
所以我一直在做的是,在我的片段着色器的给定过程中,我只引用了一个纹理单元,从纹理单元0开始。下一遍,我引用单元1。下一遍,单元2,依此类推。基于我上面的假设,这应该可以很好地工作到GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS.
然而,它似乎只在单元7之前工作,并在任何>=单元8处中断。
这听起来是不是会让我达到最大的纹理单位?还是我错过了什么?
如果我确实达到了片段着色器中允许的纹理单位的上限,我想我要做的是持有一个可变的程序数组,并在运行时根据我定义的纹理数构建任意多的程序,当我点击纹理单位索引的倍数是8的倍数时,切换到适当的程序。
这听起来合理吗,还是我漏掉了什么?
发布于 2012-08-02 23:00:34
您可以通过如下方式查询设备上的最大纹理单元数:
+ (GLint)maximumTextureUnitsForThisDevice;
{
GLint maxTextureUnits;
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &maxTextureUnits);
return maxTextureUnits;
}在我拥有的最强大的设备视网膜iPad上运行,我得到了最多8个纹理单元。这意味着您将无法将纹理绑定到GL_TEXTURE7以上的任何内容,并将可以馈送到着色器的同步纹理数限制为8。
然而,正如Tim在他的评论中所建议的那样,如果您一次只需要访问一个纹理,那么没有什么可以阻止您将每个纹理顺序绑定到单个单元,对其进行处理,然后将下一个纹理绑定到该单元。
https://stackoverflow.com/questions/11769360
复制相似问题