我想渲染圖像緩衝區中的Java(NDK在這種情況下沒有選項),並通過GL_TEXTURE_EXTERNAL_OES
它傳遞給着色器。GLES2.0:使用GL_TEXTURE_EXTERNAL_OES通過glEGLImageTargetTexture2DOES
glTexImage2D
不起作用,如spec中所述。但功能glEGLImageTargetTexture2DOES
只能通過GLES11Ext
類使用,這似乎是錯誤的使用。
不管怎樣,我試了,這讓我GL_INVALID_OPERATION
,這應該發生,如果:
如果GL是無法使用所提供的 eglImageOES(指定一個紋理對象如果,例如,是指多次採樣 eglImageOES),則生成錯誤INVALID_OPERATION。
可悲的是我不能從這個描述做出正面或反面,尤其是在Android的Java API似乎並沒有給我訪問eglImageOES
功能。我也沒有找到使用此功能的示例Java。
附帶一個小例子:
// 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");
沒有人做,或之前知道這是否可行與否?
編輯:
我看了一下glEGLImageTargetTexture2DOES
實施,看來我必須正確設置緩衝區。補充說,但仍然是相同的錯誤。
測試代碼可以在這裏找到。可惜在Android Java中無法這樣做http://code.google.com/p/test-es/source/browse/app_image_external.cpp – abergmeier