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?
172 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]; } 9Inside 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