默认的统一(数组)值

时间:2013-05-04 14:43:47

标签: opengl glsl shader fragment-shader

我没有为GL程序明确设置统一数据,而是在一个简单的测试(片段)着色器中设置'defaults':

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 个答案:

答案 0 :(得分:1)

是的,允许统一数组在GL 3.2中具有默认值。所以你的语法是有效的。

这并不意味着它总是工作,只是它有效。驱动程序错误仍然可以帮助你。