在没有 glGetUniformLocation 的情况下引用制服

Referring to uniforms without glGetUniformLocation

在我的着色器中,我喜欢使用这样的语法:

layout (location = 0) in vec3 aPos;

这样我就可以在 glVertexAttribPointer 中使用索引 0 等等,从而节省 glGetAttribLocation 调用的工作量。我想对 uniform 值做同样的事情,但如果我这样做

layout (location = 2) uniform float offset;

我的顶点着色器编译失败。有什么方法可以实现相同的行为而不使用 glGetUniformLocation?

OpenGL 4.3 or the ARB_explicit_uniform_location extension 允许您使用该语法在着色器中指定统一位置。所以你的着色器 #version 需要是 430 或者你需要在你的着色器中激活扩展才能使用这个语法。