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...