GLSL 统一的布局绑定和纹理



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

layout(binding = 0, std140) uniform uCommon
{
mat4 projectionMatrix;
mat4 viewMatrix;
};
layout(binding = 1, std140) uniform uModel
{
mat4 modelViewProjectionMatrix;
};
layout(binding = 3) uniform sampler2D uTexture;

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

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

这是正确的方法吗?

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

layout(binding = 0) uniform sampler2D uTexture;

仍在使用

layout(binding = 0, std140) uniform uCommon

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

用于指定绑定点或单位的整数常量表达式在关键字binding的所有用法中必须是唯一的。


请参阅 OpenGL 着色语言 4.60 规范; 4.4.5 统一和着色器存储块布局限定符; 第 77 页

绑定

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


请参阅 OpenGL 着色语言 4.60 规范; 4.4.6 不透明-统一布局限定符; 第 79 页

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

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

标识符绑定指定将绑定哪个单元

相关内容

  • 没有找到相关文章

最新更新