【发布时间】:2019-02-28 18:20:53
【问题描述】:
glActiveTexture 使用的采样器制服和纹理单元之间的对应关系显然无法用 opengl 查询,而且我找不到关于如何找到哪个纹理单元映射到哪个采样器制服的好的文档。这是我能找到的:
- 如果程序中只有sampler uniform,则映射到
gl_TEXTURE0 - 如果单个程序阶段中有多个采样器制服,则它们会按照它们在着色器中声明的顺序进行映射。
- 如果顶点着色器和片段着色器具有不相交的采样器 Uniform 集,则顶点着色器中的采样器首先出现,然后是片段着色器中的采样器。
- 此行为似乎由规范定义。
例如,如果顶点着色器定义:
uniform sampler2D color;
并且片段着色器定义:
uniform sampler2D tex;
uniform sampler2D norm;
然后color 被映射到gl_TEXTURE0,tex 被映射到gl_TEXTURE1,norm 被映射到gl_TEXTURE2。但如果相反,顶点着色器定义:
uniform sampler2D norm;
然后不清楚不同的纹理是如何映射的。由于可能存在布局限定符或单独的着色器阶段,这也变得更加复杂。
我似乎在任何地方都找不到这方面的文档。我所知道的一切要么来自我自己的实验,要么来自 Stackoverflow 或 OpenGL 论坛上的答案。有谁知道在所有可能的情况下如何工作的一套全面的规则,或者查询采样器对应的纹理单元的方法?
【问题讨论】: