我现在正在为我的 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;
谢谢。
最佳答案
而对于顶点着色器属性,布局位置是属性索引,
统一变量的布局位置是统一位置。
这些是不同的东西。
如果不设置显式布局位置,在链接着色器程序后读取位置,可以看到它们可以在同一个范围内。
这可以通过 glGetAttribLocation 完成
和 glGetUniformLocation
您的两种变体都是正确且可能的。
属性位置必须是唯一的,统一位置必须是唯一的。
但它们不必是明确的,超出位置索引类型。
有关布局限定符的更多详细信息,我推荐 Khronos Group 的 OGL 和 GLSL 文档:
Layout Qualifier (GLSL)
分别见OpenGL 4.6 API Core Profile Specification - 7.3.1 Program Interfaces .
Each entry in the active resource list for an interface is assigned a unique unsigned integer index in the range zero to N − 1, where N is the number of entries in the active resource list.
而统一变量的接口(interface)类型是
UNIFORM
,属性类型为 PROGRAM_INPUT
.不同程序资源的位置可以通过指令 glGetProgramResourceLocation
获取。通过其程序接口(interface)类型和名称。
关于opengl - 布局量词(位置)是否应该在统一/输入/输出之间有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45261908/