-2

我没有为 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 语法,而不是依赖于实现的 hack?(我目前没有 4+ 访问权限,但我认为答案仍然适用)。另外,关于为什么制服可能优于常量数组的任何想法?

4

1 回答 1

1

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

这并不意味着它会一直有效,只是它是有效的。驱动程序错误仍然可以得到你。

于 2013-05-04T14:50:21.650 回答