2

在 GLSL 顶点着色器中,我有:

#version 330
layout (location=0) uniform mat4 wm_;
layout (location=1) uniform mat4 vm_;
...more code...

编译着色器时没有编译错误。后来,我在 glGetUniformLocation 上 assert() 用于 wm_ 和 vm_ 返回着色器源中指定的位置。断言触发,因为 glGetUniformLocation 返回不同的值(它不返回 -1,也就是说,制服没有得到优化,它们被分配了看似有效但不同的位置。)

谁能解释这种行为?

4

1 回答 1

3

自 GLSL 4.30 起或通过扩展 GL_ARB_explicit_uniform_location 支持显式统一位置。这里的编译器过于宽容,允许使用 GLSL 3.30 中不支持的语法。这应该被视为驱动程序错误。

于 2013-02-17T18:14:38.373 回答