我需要一些帮助来找出我在尝试创建帧缓冲区oes时做错了什么。
outTex = new int[1];
GLES20.glGenTextures(2, outTex, 0);
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, outTex[0]);
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexImage2D(GLES11Ext.GL_TEXTURE_EXTERNAL_OES,
0,
GLES11Ext.GL_RGBA8_OES,
vp.width,
vp.height,
0,
GLES11Ext.GL_RGBA8_OES,
GLES20.GL_UNSIGNED_BYTE,
null);
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, 0);
fbo = new int[1];
GLES11Ext.glGenFramebuffersOES(1, fbo, 0);
GLES11Ext.glBindFramebufferOES(GLES11Ext.GL_FRAMEBUFFER_OES, fbo[0]);
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, outTex[0]);
GLES11Ext.glFramebufferTexture2DOES(
GLES11Ext.GL_FRAMEBUFFER_OES,
GLES11Ext.GL_COLOR_ATTACHMENT0_OES,
GLES11Ext.GL_TEXTURE_EXTERNAL_OES,
outTex[0],
0
);
int status = GLES11Ext.glCheckFramebufferStatusOES(GLES11Ext.GL_FRAMEBUFFER_OES);
if (status != GLES11Ext.GL_FRAMEBUFFER_COMPLETE_OES) {
throw new RuntimeException("Framebuffer is not complete: " +
Integer.toHexString(status));
}
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, 0);
GLES11Ext.glBindFramebufferOES(GLES11Ext.GL_FRAMEBUFFER_OES, 0);
我得到的状态是36055,我不知道为什么它是不完整的。
更多信息,我想做的事情如下:
我想使用一个外部的oes纹理(从媒体播放器),让我们称它为tex0,在下一个管道:
tex0->gpu进程->(使用帧缓冲区)结果tex1。
tex1也必须是gl_texture_external_oes。
我已经尝试并成功地使用绑定到帧缓冲区的纹理
所有的事情都用普通的帧缓冲区。
因此,我需要一些帮助,要么是我在代码中做错了什么,要么是找到另一种方法(可能使用普通帧缓冲区)从gpu获取纹理外部oes。
非常感谢。
最佳答案
从关于glTexImage2D
的目标[第一个参数]的man页:
指定活动纹理单元的目标纹理。
必须是gl_纹理_2d,
纹理立方体贴图正x,
gl_纹理_立方体_贴图_负_x,
gl_texture_cube_map_positive_,
gl_texture_cube_map_阴性,
格列
纹理立方体贴图正z,或
格莱特
外部立方体映射负Z。
您试图在一个glTexImage2D
上调用GLES11Ext.GL_TEXTURE_EXTERNAL_OES
,这不是上面的一个。
从目前为止我有限的研究来看,你必须将oes纹理绘制到绑定到纹理的帧缓冲区中,从那里你可以通过帧缓冲区或纹理访问像素。