为什么常规纹理或纹理缓冲对象的类型在GLSL中必须是一致的

时间:2018-04-03 06:09:42

标签: opengl glsl

我发现所有的opengl教程都会在GLSL中将采样器类型或TBO类型设置为 uniform 。但我不知道为什么。任何人都可以详细解释一下吗?

1 个答案:

答案 0 :(得分:1)

在GLSL中,您有两种类型的输入数据。可以根据顶点/实例(属性)更改的数据,以及在渲染调用中保持不变的全局数据(制服缓冲区

要使用纹理将其绑定到纹理单元,并在着色器程序中使用它,您将 uniform 的值设置为纹理单元的idx。

所以设置看起来像这样:

glActiveTexture(GL_TEXTURE0 + 4)
glBindTexture(GL_TEXTURE_2D, texture);
glUniform1i(glGetUniformLocation(program, "tex"), 4)

从OpenGL 4.2开始,您可以在着色器中定义绑定,这样如果已知使用的纹理单元,则不需要glUniform1i调用:

layout(binding=4) uniform sampler2D tex;