引用没有 glGetUniformLocation 的制服

mem*_*eme 1 c++ opengl glsl opengl-3 opengl-4

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

layout (location = 0) in vec3 aPos;

所以,我可以只使用索引0glVertexAttribPointer和这样的,节省了努力glGetAttribLocation通话。我想对uniform价值观做同样的事情,但如果我这样做

layout (location = 2) uniform float offset;

Run Code Online (Sandbox Code Playgroud)

我的顶点着色器无法编译。有没有办法实现相同的行为而不使用glGetUniformLocation

Nic*_*las 6

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

  • @memememe:这并不是真正的硬件功能;这是一个真正的硬件功能。这纯粹是 API 的更改。因此,扩展程序的可用性完全取决于驱动程序的最新程度。您是否想要支持本身尚未[自 2013 年以来未更新驱动程序](http://opengl.gpuinfo.org/listreports.php?extension=GL_ARB_explicit_attrib_location&option=not) 的硬件? (2认同)