2011-01-03 21 views
8

Sto modificando la versione della versione di Android dell'esempio di trama 2d dalla guida di programmazione OpenGl ES2.0 per modificare lo shader di frammenti. questo è scritto in puro Java e non usa NDK.glGetShaderInfoLog restituisce stringa vuota (android)

L'esempio di vanilla funziona perfettamente sul mio telefono, ma quando cambio il codice dello shader non funziona più. Questo perché il mio shader modificato non viene compilato (ovviamente), ma non riesco a trovare la causa del problema poiché glGetShaderInfoLog restituisce una stringa vuota.

Ho fatto una ricerca su questo problema, e apparentemente, dal 22 luglio, era un problema noto, ma mi chiedevo quali fossero i modi per aggirarlo. Un post che ho trovato ha detto di aver scritto un wrapper NDK per la funzione, ma essendo nuovo nello sviluppo di Android, non so davvero come farlo.

risposta

6

Sei affetto da a bug. Ho lavorato attorno allo old GL ES 2.0 bindings per ottenere un glGetShaderInfoLog funzionante. Come questo:

import com.badlogic.gdx.backends.android.AndroidGL20; 
... 
AndroidGL20 gl2 = new AndroidGL20(); 
Log.e(TAG, gl2.glGetShaderInfoLog(shader)); 

ho ancora utilizzare la libreria GLES20 involucro standard per tutto il resto, quindi questo è stato semplice far cadere nella mia base di codice. I due wrapper apparentemente possono coesistere senza problemi.

2

Solo nel caso in cui qualcuno trovi questa domanda poiché hanno riscontrato lo stesso problema, l'unico modo in cui ho trovato "aggirarlo" è compilare lo shader con un'altra app (come Rendermonkey). Non ideale, ma mi ha aiutato nel mio progetto!

1

Ho avuto lo stesso problema.

  1. Assicurarsi di avere quanto segue ApplicationManufest.xml:

    < usa-Android Caratteristica: glEsVersion = Android "0x00020000": required = "true" />

  2. Chiamalo dopo aver inizializzato GLSurfaceView

glSurfaceView.SetEGLContextClientVersion (2);

Problemi correlati