布局量化(位置)应该在统一/进/出之间有所不同吗?

时间:2017-07-23 05:42:08

标签: opengl glsl

我现在正在为我的GLSL着色器设置布局量词(位置)。这个问题让我觉得这些量词ID是否需要彼此不同。

是否必须:

layout (location = 0) uniform vec3 v1;
layout (location = 1) in vec3 v2;
layout (location = 2) uniform vec3 v3;
layout (location = 3) in vec3 v4;

或者它可以(因为位置可以指定为制服或输入):

layout (location = 0) uniform vec3 v1;
layout (location = 0) in vec3 v2;
layout (location = 1) uniform vec3 v3;
layout (location = 1) in vec3 v4;

感谢。

1 个答案:

答案 0 :(得分:3)

对于顶点着色器属性,布局位置是属性索引, 统一变量的布局位置是统一的位置。 这些是不同的东西。

如果在链接着色器程序后没有设置显式布局位置并读取位置,则可以看到它们可以在同一范围内。 这可以通过glGetAttribLocation来完成 和glGetUniformLocation

您的两种变体都是正确且可行的。 属性位置必须是唯一的,统一位置必须是唯一的。 但除了位置索引类型之外,它们不必是明确的。

有关布局限定符的更多详细信息,我建议使用Khronos Group的OGL和GLSL文档: Layout Qualifier (GLSL)