2012-12-31 58 views
6

我想渲染圖像緩衝區中的JavaNDK在這種情況下沒有選項),並通過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實施,看來我必須正確設置緩衝區。補充說,但仍然是相同的錯誤。

+2

測試代碼可以在這裏找到。可惜在Android Java中無法這樣做http://code.google.com/p/test-es/source/browse/app_image_external.cpp – abergmeier

回答