2013-05-04 165 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