【发布时间】:2017-08-15 18:28:54
【问题描述】:
根据 Apple 的 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 的倍数时,切换到适当的程序。
这听起来合理吗,还是我遗漏了什么?
【问题讨论】:
-
如果每个 pass 只使用一个纹理,那么为什么不在每个 pass 之后绑定一个新的纹理呢?我很困惑为什么你认为你需要不断增加纹理单元号。
-
太棒了!因为我的理解是完全错误的。我假设将纹理分配给给定的单元会产生将纹理数据发送到 opengl 的成本,因此我不想在使用纹理后切换单元。现在我一直在使用单元 0,这解决了我在大于 8 时遇到的任何问题。我正在慢慢爬上学习曲线,所以感谢您指出这一点。