2013-05-04 161 views
-1

而不是一個GL程序顯式地設置統一的數據,我設置在一個簡單的測試「默認」(片段)着色器:默認均勻(陣列)值

uniform vec3 face_rgb[] = vec3[] 
(
    vec3(0.0, 0.0, 1.0), vec3(0.0, 1.0, 0.0), vec3(1.0, 0.0, 0.0), 
    vec3(1.0, 0.0, 1.0), vec3(0.0, 1.0, 1.0), vec3(1.0, 1.0, 0.0), 
    vec3(0.2, 0.2, 0.2), vec3(0.0, 0.0, 0.0) 
); 

取決於片段的紋理座標,一個索引值制定爲查找RGB值。 (實際的RGB值是無關緊要的)

這工作得很好用OS X(GL 3.2核心配置文件)。實際上,要比使用帶有const陣列的索引好很多。我的問題是 - 這是有效的GLSL語法,而不是依賴於實現的黑客? (我目前沒有4+訪問權限,但我認爲答案仍然適用)。此外,關於爲什麼統一可能會超越常數陣列的任何想法?

回答

1

是的,均勻的陣列被允許有在GL 3.2的默認值。所以你的語法是有效的。

這並不意味着它會一直工作,只是它是有效的。驅動程序錯誤仍然可以幫助您。

+0

確實如此。我發現在'glCompileShader'中使用'uniform uint'而不是'uniform int'實際*崩潰*(LLVM?)解析器的情況。 – 2013-05-04 14:59:46