GLES2.0: 通过glEGLImageTargetTexture2DOES使用GL_TEXTURE_EXTERNAL_OES

7
我想在Java中呈现一个图像缓冲区(在这种情况下,不考虑NDK),并通过GL_TEXTURE_EXTERNAL_OES传递给着色器。

glTexImage2D不起作用,如规范中所述。但是,函数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
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接