GLSL for-loop数组索引

时间:2013-04-16 14:16:37

标签: opengl glsl intel

我在使用GLSL中的变量索引时遇到了一些麻烦。 下面的GLSL代码在NVidia卡上运行良好。但它不适用于我的英特尔HD 4000:

for(int i=0;i<int(uLightCount);++i)
{
    vec3 lightPos = uLightsPos[i];
    ....
}

没有着色器编译器错误。该程序只是在glUseProgram

上崩溃了

我该如何解决这个问题?

修改

uLightCountuLightsPos是制服:

#define MAX_LIGHTS 10
uniform float uLightCount;
uniform vec3 uLightsPos[MAX_LIGHTS];

编辑2:

我找到了一个奇怪的解决方法:

#define i0  0
#define i1  1
#define i2  2
...

for(int i=0;i<int(uLightCount);++i)
{
    vec3 lightPos;

    if (i==i0) 
        lightPos = uLightsPos[i0];
    if (i==i1) 
        lightPos = uLightsPos[i1];
    ....
}

知道为什么会这样吗?

2 个答案:

答案 0 :(得分:1)

索引必须是常量。这就是你的解决方法有效的原因。

因此无法写出

for(int i=0;i<10;++i)
{
  result += uLightsPos[i];
}

答案 1 :(得分:0)

在循环中,我已完成此操作:

for(int i=0;i<n;i++) {
    int j = i;
    and use myArray[j];
}

它已编译...因此您可以尝试使用代码。