GLSL统一布局绑定和纹理

时间:2018-03-04 17:00:56

标签: opengl glsl opengl-4

当制服使用布局绑定时,我对于绑定纹理的正确方法感到有点困惑。

2 1511863545
0 1511863546
5 1511863547
3 1511863548
8 1511863549
11 1511863550

要绑定我的第一个纹理,我应该使用“GL_TEXTURE0 + 3”?

layout(binding = 0, std140) uniform uCommon
{
    mat4 projectionMatrix;
    mat4 viewMatrix;
};

layout(binding = 1, std140) uniform uModel
{
    mat4 modelViewProjectionMatrix;
};

layout(binding = 3) uniform sampler2D uTexture;

这是正确的方法吗?

编辑:或者是采样器使用与其他制服分开的绑定?我可以使用:

glActiveTexture(GL_TEXTURE0 + 3);
glBindTexture(GL_TEXTURE_2D, textureId);

,同时仍在使用

layout(binding = 0) uniform sampler2D uTexture;

1 个答案:

答案 0 :(得分:3)

统一块绑定索引与采样器绑定位置无关。这些是不同的东西。

integer-constant-expression ,用于指定绑定点或单位,在关键字 binding 的所有用法中不得唯一


OpenGL Shading Language 4.60 Specification; 4.4.5 Uniform and Shader Storage Block Layout Qualifiers; page 77

  

绑定标识符指定与统一或着色器存储块对应的统一缓冲区绑定点,它将用于获取块的成员变量的值。


OpenGL Shading Language 4.60 Specification; 4.4.6 Opaque-Uniform Layout Qualifiers; page 79

  

图像和采样器类型都采用统一布局限定符标识符进行绑定:

layout-qualifier-id :
    binding = integer-constant-expression
     

标识符绑定指定绑定的单位