2013-02-17 30 views
2

在GLSL頂點着色器,我有:明確統一的位置沒有影響

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

我沒有得到任何編譯錯誤時,着色器編譯。後來,我對glGetUniformLocation聲明瞭wM_和vm_返回着色器源中指定的位置。因爲glGetUniformLocation返回不同的值(它不返回-1,也就是說,制服沒有得到優化,它們被分配了看似有效但不同位置的東西)。

任何人都可以解釋這個行爲?

回答

3

自GLSL 4.30或擴展GL_ARB_explicit_uniform_location以來,支持顯式的統一位置。 此處的編譯器過於寬容,並且允許GLSL中不支持的語法3.30 這應該被視爲驅動程序錯誤。

+1

您應該提及如何在GLSL中啓用擴展。 – 2013-02-17 21:28:50

+0

啊,謝謝。爲了清楚起見,這是在AMD,Catalyst控制中心報告Catalyst版本13.1和OpenGL版本6.14.10.12002上運行的。 – Emil 2013-02-17 21:29:00

+1

要啓用擴展,請添加以下行:'#version'後面的'#extension GL_ARB_explicit_uniform_location:require' – Maf 2013-02-18 06:21:53