2

我有以下 GLSL 代码:

for( int i=0; i<3; ++i ) {
    finalColor += texture2D(myTextures[i],uv);
}

我的 opengl 驱动程序给了我以下输出:“错误:在 GLSL 1.30 及更高版本中禁止使用非常量表达式索引的采样器数组”

我可以手动展开循环,但我想知道是否有办法重写for以使 GLSL 编译器明白我i可以在编译时解决。

观察:我在linux机器上使用intel驱动

4

1 回答 1

1

编译器可以展开循环并i在编译时解析这一事实并没有改变i不是整数常量表达式的事实。因此,在 GLSL 1.20 中不允许将其用作索引。

所以不,除了手动展开循环之外,您无能为力。

此外,在 GLSL 4.00+ 中取消了此限制;在那里,您可以使用动态统一的表达式(您的循环计数器是)

于 2013-03-05T03:09:20.777 回答