Sto sperimentando con OpenGL ES 3.0 ed ha trovato la seguente dichiarazione nella scheda di riferimento rapido:Come si dichiara la versione OpenGL negli shader su Android?
“#Version 300 es” devono apparire nella prima riga di un programma di shader scritto in GLSL ES versione 3.00 . Se omesso, lo shader sarà trattato come versione di targeting 1.00.
così ho cercato di aggiungere questo, all'inizio dei miei shader, ma che ha portato solo in errore
link riuscita a causa di validi vertex shader.
come riportato da .glGetProgramInfoLog
. Se rimuovo la prima riga con l'istruzione "#version 300 gl", lo shader compila e funziona.
Questo è il codice della mia 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";
ho aggiunto anche la dichiarazione di versione al vertice e shader frammento, e ancora ottenere lo stesso errore.
Io chiamo setEGLContextClientVersion(3)
nel mio GLSurfaceView e ho aggiunto <uses-feature android:glEsVersion="0x00030000" android:required="true" />
al mio manifest per indicare che l'app richiede OpenGL ES 3.0.
Sto leggendo la documentazione di OpenGL ES errata e non è necessario aggiungere questa dichiarazione di versione? Se ho bisogno di aggiungerlo, cosa sto facendo male che si traduce sempre in un errore?
Suggerimento utile: utilizzare glGetShaderInfoLog per ottenere errori di compilazione degli shader più dettagliati. –