GLSL for-loop array index

I'm having some trouble using variable indices in GLSL. The folowing GLSL code is working fine on NVidia cards. But its not working on my Intel HD 4000:

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

There is no Shader-Compiler Error. The program simply crashes on glUseProgram

How can I fix this?

Edit:

uLightCount and uLightsPos are uniforms:

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

Edit 2:

I have found a strange workaround:

#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]; ....
}

Any idea why this is working?

17

2 Answers

The index must be constant. That's why your workaround works.

So it's not possible to write that

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

Inside the loop, I have done this:

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

It compiled... so you can try in your code.

2

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like