我在使用GLSL中的变量索引时遇到了一些麻烦。 下面的GLSL代码在NVidia卡上运行良好。但它不适用于我的英特尔HD 4000:
for(int i=0;i<int(uLightCount);++i)
{
vec3 lightPos = uLightsPos[i];
....
}
没有着色器编译器错误。该程序只是在glUseProgram
我该如何解决这个问题?
修改
uLightCount
和uLightsPos
是制服:
#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];
....
}
知道为什么会这样吗?
答案 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];
}
它已编译...因此您可以尝试使用代码。