2013-09-07 12 views
6

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?

+1

Suggerimento utile: utilizzare glGetShaderInfoLog per ottenere errori di compilazione degli shader più dettagliati. –

risposta

6

La lettura dello GLSL ES3.0 spec elenca "attributo" e "variabile" come parole chiave riservate che generano un errore.

In GLES3, è necessario qualificare le variabili di input con "in" e le variabili di output con "out".

Così nel vertex shader,

attribute -> in 
varying -> out 

E nel frammento di shader

varying -> in 

sezione 4.3 nelle specifiche (qualificazioni di stoccaggio) ha tutti i dettagli.

Problemi correlati