2012-12-31 8 views
6

desidero rendere un buffer di immagine in Java (NDK è opzione in questo caso) e passarlo al shader tramite GL_TEXTURE_EXTERNAL_OES.GLES2.0: Uso GL_TEXTURE_EXTERNAL_OES via glEGLImageTargetTexture2DOES

glTexImage2D non funziona, come indicato nello spec. Ma la funzione glEGLImageTargetTexture2DOES è disponibile solo tramite la classe GLES11Ext, che sembra essere un tipo sbagliato.

In ogni caso, ho provato e mi dà GL_INVALID_OPERATION, che dovrebbe avvenire se:

Se il GL è in grado di specificare un oggetto consistenza utilizzando le dotazione eglImageOES (se, ad esempio, si riferisce a un multicampionato eglImageOES), viene generato l'errore INVALID_OPERATION.

Purtroppo non posso fare a testa o croce da questa descrizione, tanto più che l'API Java di Android non sembra darmi l'accesso alle funzioni eglImageOES. Né ho trovato un esempio Java per l'utilizzo di questa funzione.

attaccato un piccolo esempio:

// Bind the texture unit 0 
GLES20.glActiveTexture(GLES20.GL_TEXTURE0); 
throwOnError("glActiveTexture"); 

GLES20.glBindTexture(GL_TEXTURE_EXTERNAL_OES, _samplerLocation); 
throwOnError("glBindTexture"); 

// _output is ByteBuffer.allocateDirect(pixels * Integer.SIZE/Byte.SIZE).order(ByteOrder.nativeOrder()).asIntBuffer() 
_output.rewind(); 
_output.limit(pixels); 
GLES11Ext.glEGLImageTargetTexture2DOES(GL_TEXTURE_EXTERNAL_OES, _output); 
throwOnError("glEGLImageTargetTexture2DOES"); // <-- throws 

GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); 
throwOnError("glDrawArrays"); 

Qualcuno fare che prima o sa se questo è possibile o no?

EDIT:

ho dato un'occhiata a glEGLImageTargetTexture2DOES implementazione e sembra che devo installare correttamente il buffer. Aggiunto questo, ma sempre lo stesso errore.

+2

Codice di prova è disponibile qui. Purtroppo non è possibile farlo in Android Java http://code.google.com/p/test-es/source/browse/app_image_external.cpp – abergmeier

risposta