Ich experimentiere mit OpenGL ES 3.0 und die folgenden Anweisung in dem Schnellreferenzblatt gefunden:Wie deklariere ich die OpenGL-Version in Shadern auf Android?
„#version 300 es“ in der ersten Zeile eines Shader-Programms geschrieben in GLSL ES Version erscheinen 3.00 . Wenn dieser Parameter weggelassen wird, wird der Shader als Targeting-Version 1.00 behandelt.
So habe ich versucht, dies zu Beginn meiner Shadern hinzufügen, aber das führte nur in dem Fehler
Verbindung aufgrund ungültigen Vertex-Shader fehlgeschlagen.
wie von .glGetProgramInfoLog
gemeldet. Wenn ich die erste Zeile mit der Anweisung "#version 300 gl" entferne, kompiliert der Shader und funktioniert.
Dies ist der Code meines Vertex-Shader
private final String vertexShaderCode =
"#version 300 es \n" +
"uniform mat4 uMVPMatrix; \n" +
"attribute vec2 a_TexCoordinate; \n" +
"attribute vec4 vPosition; \n" +
"varying vec2 v_TexCoordinate; \n" +
"void main() { \n" +
" v_TexCoordinate = a_TexCoordinate; \n" +
" gl_Position = uMVPMatrix * vPosition; \n" +
"} \n";
ich die Version Anweisung zum Scheitel und die Fragment-Shader, auch hinzugefügt und immer noch die gleichen Fehler.
Ich rufe setEGLContextClientVersion(3)
in meinem GLSurfaceView, und ich fügte <uses-feature android:glEsVersion="0x00030000" android:required="true" />
meinem Manifest hinzu, um anzuzeigen, dass die App OpenGL ES 3.0 erfordert.
Liest ich die OpenGL ES-Dokumentation falsch und muss diese Version nicht hinzufügen? Wenn ich es hinzufügen muss, was mache ich falsch, dass es immer zu einem Fehler führt?
Hilfreicher Tipp: Verwenden Sie glGetShaderInfoLog, um detailliertere Shader-Kompilierungsfehler zu erhalten. –