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.