Java GLES2.0:通过glEGLImageTargetTexture2DOES使用GL_纹理_外部_OES
我想用Java渲染一个图像缓冲区(在这种情况下NDK没有选项),并通过Java GLES2.0:通过glEGLImageTargetTexture2DOES使用GL_纹理_外部_OES,java,android,opengl-es-2.0,egl,Java,Android,Opengl Es 2.0,Egl,我想用Java渲染一个图像缓冲区(在这种情况下NDK没有选项),并通过GL\u TEXTURE\u EXTERNAL\u OES将其传递给着色器 glTexImage2D不工作,如中所述。但是函数glEGLImageTargetTexture2DOES只能通过GLES11Ext类使用,这似乎有点不正确 无论如何,我试过了,它给了我GL\u无效\u操作,如果: 如果GL无法使用提供的 eglImageOES(例如,如果指多采样 eglImageOES),生成错误INVALID_操作 遗憾的是,我无
GL\u TEXTURE\u EXTERNAL\u OES
将其传递给着色器
glTexImage2D
不工作,如中所述。但是函数glEGLImageTargetTexture2DOES
只能通过GLES11Ext
类使用,这似乎有点不正确
无论如何,我试过了,它给了我GL\u无效\u操作
,如果:
如果GL无法使用提供的
eglImageOES(例如,如果指多采样
eglImageOES),生成错误INVALID_操作
遗憾的是,我无法从这个描述中看出正反两面,特别是因为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" );
//绑定纹理单元0
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
throwOnError(“glActiveTexture”);
GLES20.glBindTexture(GL_TEXTURE_EXTERNAL_OES,_samplerLocation);
throwOnError(“glBindTexture”);
//_输出为ByteBuffer.allocateDirect(像素*Integer.SIZE/Byte.SIZE).order(ByteOrder.nativeOrder()).asIntBuffer()
_output.rewind();
_输出限制(像素);
GLES11Ext.glEGLImageTargetTexture2DOES(GL_纹理_外部_OES,_输出);
throwOnError(“glEGLImageTargetTexture2DOES”);// 本页中的一些评论可能会有所帮助:
此处提供测试代码。不幸的是,在Android Java中无法做到这一点