该访问采样器的常量

时间:2013-03-05 02:07:49

标签: opengl glsl

我有以下GLSL代码:

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

此外,GLSL 4.00+中取消了此限制;在那里,你可以使用dynamically uniform expression (which your loop counter is)