【问题标题】:GLSL Uniform layout binding and texturesGLSL 统一布局绑定和纹理
【发布时间】:2018-03-04 17:00:55
【问题描述】:

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

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

【问题讨论】:

  • 它是否有效?如果它不起作用,则显示一个完整的例子来说明什么不起作用。如果可行,请解释您提出问题的原因以及您期望的解释类型。 Atm,“是”将是一个有效的答案。
  • 为什么你认为统一块绑定索引与采样器绑定位置有关?
  • OpenGL Shading Language 4.60 Specification; 4.4.6 Opaque-Uniform Layout Qualifiers; page 79: 图像和采样器类型都采用统一的布局限定符标识符进行绑定...。标识符绑定指定将绑定哪个单元。
  • BDL,它有效。但它甚至在“uTexture”绑定到“0”(而“uCommon”也绑定到“0”)并且使用“GL_TEXTURE0 + 0”时也有效。所以我不确定采样器是否使用单独的绑定。附:我没有收到任何 GL 警告或错误。
  • @Gediminas 请参阅 Nicol Bolas 的评论。统一块绑定索引与采样器绑定位置无关。这些是不同的东西。它们不必在所有类型的“绑定”中都是唯一的。

标签: opengl glsl shader opengl-4


【解决方案1】:

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

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


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

绑定标识符指定uniform或shader存储块对应的uniform缓冲区绑定点,用于获取block的成员变量的值


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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    相关资源
    最近更新 更多