我现在正在为我的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;
感谢。
答案 0 :(得分:3)
对于顶点着色器属性,布局位置是属性索引, 统一变量的布局位置是统一的位置。 这些是不同的东西。
如果在链接着色器程序后没有设置显式布局位置并读取位置,则可以看到它们可以在同一范围内。 这可以通过glGetAttribLocation来完成 和glGetUniformLocation
您的两种变体都是正确且可行的。 属性位置必须是唯一的,统一位置必须是唯一的。 但除了位置索引类型之外,它们不必是明确的。
有关布局限定符的更多详细信息,我建议使用Khronos Group的OGL和GLSL文档: Layout Qualifier (GLSL)