glActiveTexture
显然不能查询采样器统一和纹理单元之间的对应关系,我找不到很好的文档来查找哪个纹理单元映射到哪个采样器统一。这是我能够找到的信息:
- 如果程序中只有一个采样器统一,则它被映射到
gl_TEXTURE0
- 如果单个程序阶段中有多个采样器统一,则它们按照在着色器中声明的顺序进行映射。
- 如果顶点着色器和片段着色器具有不相交的采样器统一集,则顶点着色器中的采样器首先出现,然后是片段着色器中的采样器。
- 此行为似乎由规范定义。
例如,如果顶点着色器定义如下:
uniform sampler2D color;
而片元着色器定义了:
uniform sampler2D tex;
uniform sampler2D norm;
然后color
被映射到gl_TEXTURE0
,tex
被映射到gl_TEXTURE1
,norm
被映射到gl_TEXTURE2
。但是,如果顶点着色器定义如下:
uniform sampler2D norm;
那么不清楚如何映射不同的纹理。这也会受到布局限定符或独立着色器阶段的影响,这使得问题更加复杂。
我似乎无法在任何地方找到相关文档。我所知道的一切都来源于我的实验或者Stackoverflow或OpenGL论坛上的回答。有人知道在所有可能情况下如何工作的全面规则集,或者知道查询sampler与哪个纹理单元相对应的方法吗?