根据 Apple 的 OpenGL ES 2.0 限制文档: “您可以在片段着色器中使用多达 8 个纹理。”
这似乎不是特别具体,所以我假设它的意思是,“你可以为片段着色器的每个通道引用最多 8 个纹理单元。”
所以我一直在做的是在我的片段着色器的给定通道中,我只引用一个纹理单元,从纹理单元 0 开始。下一个通道,我引用单元 1。下一个通道,单元 2,依此类推. 根据我的上述假设,这应该可以正常工作GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS.
然而,它似乎只工作到第 7 单元,并且在任何 >= 单元 8 处中断。
听起来这会导致我达到最大纹理单位吗?还是我错过了什么?
如果我确实达到了片段着色器中允许的纹理单元的上限,我想我要做的是保存一个可变的程序数组,并在运行时构建我需要多少个我定义的纹理的程序,并且当我达到 8 倍数的纹理单元索引的步骤时,切换到适当的程序。
这听起来合理吗,还是我错过了什么?