Das Schreiben in gl_FragColor führt unter Android zu INVALID_OPERATION

Ich versuche OGLES2 für NDK zu beherrschen und bleibe bei GLSL-Shadern. Die Situation ist ähnlich wiedie hier bereits hervorgehobene, aber es scheint, dass der Grund dahinter etwas anders ist.

Ich habe die einfachsten Shader, die es gibt.

Scheitel:
#version 110
attribute vec3 vPosition;
void main(void)
{
    gl_Position = vec4(vPosition, 1.0);
    gl_FrontColor = gl_BackColor = vec4(0.3, 0.3, 0.3, 1); // ***
}
Fragment:
#version 110
void main(void)
{
    gl_FragColor = gl_Color;
}

Einfach und unkompliziert. Ich definiere meine Dreiecke sogar direkt im Clip-Bereich. Der Stern (***) Zeile in der VS-Quelle macht dieglUseProgram rufen Sie an, um die zu werfenGL_INVALID_OPERATION Fehler (und alle folgendenglGetAttribLocation Anrufe machen dasselbe), wenn ich die App auf meinem Android 403-Gerät starte. Ich kann schreibengl_FragColor in FS (einige hartcodiertvec4 Wert), kann aber nicht einmal diegl_FrontColor/gl_BackColor Werte in VS.

E/Adreno200-ES20(16211): <qgl2DrvAPI_glUseProgram:1344>: GL_INVALID_OPERATION
E/Adreno200-ES20(16211): <qgl2DrvAPI_glGetAttribLocation:531>: GL_INVALID_OPERATION

Ich überprüfe jeden möglichen Fehler (glGetError undglGetShaderInfoLog) Während der Shader-Kompilierung und -Verknüpfung ist dort alles klar.

Die Anwendung funktioniert unter Windows einwandfrei, wenn ich meine OGL-Implementierung auf eine JOGL-Implementierung umstelle (der gesamte Bootstrapping- und Rendering-Code bleibt gleich). Ich kann sogar Scheitelpunktattribute verwenden, die eine Farbe enthalten, überhaupt keine Probleme.

Gibt es eine Möglichkeit, dieses Verhalten zu beheben? Ich glaube nicht, dass die Implementierung von Android OGLES so istDas krank, wahrscheinlich fehlt mir nur ein Teil davonEigenschaften...

Antworten auf die Frage(1)

Ihre Antwort auf die Frage