小编Inf*_*her的帖子

opengl中纹理单元和采样器制服的对应关系

glActiveTexture显然不能用opengl查询采样器制服和纹理单元之间的对应关系,我找不到关于如何找到哪个纹理单元映射到哪个采样器制服的好文档。这是我能够找到的:

  • 如果程序中只有采样器统一,那么它被映射到 gl_TEXTURE0
  • 如果在单个程序阶段中有多个采样器制服,则它们将按照它们在着色器中声明的顺序进行映射。
  • 如果顶点着色器和片段着色器具有不相交的采样器统一集,则顶点着色器中的采样器首先出现,然后是片段着色器中的采样器。
  • 这种行为似乎是由规范定义的。

例如,如果顶点着色器定义:

uniform sampler2D color;
Run Code Online (Sandbox Code Playgroud)

片段着色器定义:

uniform sampler2D tex;
uniform sampler2D norm;
Run Code Online (Sandbox Code Playgroud)

然后color被映射到gl_TEXTURE0tex被映射到gl_TEXTURE1,然后norm被映射到gl_TEXTURE2。但是如果顶点着色器定义为:

uniform sampler2D norm;
Run Code Online (Sandbox Code Playgroud)

然后不清楚如何映射不同的纹理。由于具有布局限定符或单独的着色器阶段的可能性,这也变得更加复杂。

我似乎无法在任何地方找到有关此的文档。我所知道的一切要么来自我自己的实验,要么来自 Stackoverflow 或 OpenGL 论坛上的答案。有没有人知道在所有可能的情况下如何工作的一套全面的规则,或者查询采样器对应的纹理单元的方法?

opengl shader glsl

3
推荐指数
2
解决办法
1677
查看次数

标签 统计

glsl ×1

opengl ×1

shader ×1