C++ 指没有glGetUniformLocation的制服
在我的着色器中,我喜欢使用如下语法: vec3 aPos中的布局(位置=0)代码> 这样我就可以只使用C++ 指没有glGetUniformLocation的制服,c++,opengl,glsl,opengl-3,opengl-4,C++,Opengl,Glsl,Opengl 3,Opengl 4,在我的着色器中,我喜欢使用如下语法: vec3 aPos中的布局(位置=0) 这样我就可以只使用glvertexattributepointer中的index0等,省去了调用glgetAttributeLocation的工作量。我想对uniform值也这样做,但如果我这样做了 layout (location = 2) uniform float offset; 我的顶点着色器无法编译。是否有任何方法可以实现相同的行为而不使用glGetUniformLocation?允许您使用该语法指定着色
glvertexattributepointer
中的index0
等,省去了调用glgetAttributeLocation
的工作量。我想对uniform
值也这样做,但如果我这样做了
layout (location = 2) uniform float offset;
我的顶点着色器无法编译。是否有任何方法可以实现相同的行为而不使用
glGetUniformLocation
?允许您使用该语法指定着色器中的统一位置。因此,您的着色器#版本需要为430,或者您需要激活着色器中的扩展才能使用此语法。允许您使用该语法指定着色器中的统一位置。因此,您的着色器#版本需要为430,或者您需要激活着色器中的扩展才能使用此语法。哦,我明白了!如果我想以旧硬件为目标,那么制服是否必须使用glGetUniformLocation
?一般来说,GPU(即使是集成的GPU)不支持4.3有多旧或有多坏?@mememe:这不是真正的硬件功能;这纯粹是API的改变。因此,扩展的可用性完全取决于驱动程序的更新程度。你想支持本身没有的硬件吗?哦,我明白了!如果我想以旧硬件为目标,那么制服是否必须使用glGetUniformLocation
?一般来说,GPU(即使是集成的GPU)不支持4.3有多旧或有多坏?@mememe:这不是真正的硬件功能;这纯粹是API的改变。因此,扩展的可用性完全取决于驱动程序的更新程度。你想支持本身没有的硬件吗?你考虑过使用UBO而不是普通制服吗?我还不完全熟悉它们,它们在这里有什么好处?你可以使用std140
布局,这样你就不必查询任何东西了。您还可以通过更新频率更有效地对制服进行分组,并且您还可以对不同的着色器使用相同的UBO,而不必为每个着色器分别更新制服您考虑过使用UBO而不是普通制服吗?我还不完全熟悉它们,他们在这里有什么好处?您可以使用std140
布局,这样您就不必查询任何东西了。您还可以通过更新频率更有效地对制服进行分组,还可以对不同的着色器使用相同的UBO,而不必为每个着色器分别更新制服