GLSL for-Schleife array-index

Ich habe einige Schwierigkeiten, die mit Variablen Indizes in GLSL.
Die folgenden GLSL-code ist in Ordnung, die auf NVidia-Karten. Aber es funktioniert nicht auf meinem Intel-HD-4000:

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

Gibt es keine Shader-Compiler-Fehler. Das Programm einfach abstürzt, auf glUseProgram

Wie kann ich dieses Problem beheben?

Edit:

uLightCount und uLightsPos sind Uniformen:

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

Edit 2:

Ich habe einen seltsamen 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];
    ....
}

Jede Idee, warum das funktioniert?

Vielleicht sollten Sie prüfen, welche shader-Modell unterstützt wird, der durch die Intel-Karten?In der Regel sind diese onboard-Karten unterstützen sehr alte OpenGL und GLSL-Implementierungen
mit der neuesten bootcamp-Treiber (auf meinem MacBook Air) OpenGL 4.0 unterstützt wird
Versuchte zu Lesen, glGetError() ?
Ja aber kein Fehler. Ich habe einen Fehler-check nach jedem gl-rufen.
Versuchen Sie, die Aktualisierung von Treibern auf dem neuesten 15: 33 Uhr version.

InformationsquelleAutor Bastl | 2013-04-16

Schreibe einen Kommentar