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.
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