当我试图创建一个框架缓冲区时,我需要一些帮助来找出我做错了什么。
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。
我已经尝试并成功地使用了绑定到框架缓冲区的TEXTURE_2D,并且每一件事都使用普通的框架缓冲区。
因此,我需要一些帮助,要么我在代码中做错了什么,要么找到了另一种方法(可能使用普通的框架缓冲区)从GPU获得纹理外部的OES。
非常感谢。
发布于 2019-01-19 21:17:26
从有关glTexImage2D
的目标第一个参数的glTexImage2D
页面中删除
指定活动纹理单元的目标纹理。 必须是GL_TEXTURE_2D,GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y,GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_ TEXTURE_CUBE_MAP_POSITIVE_Z,或 GL_T EXTURE_CUBE_MAP_NEGATIVE_Z.
您正在尝试在一个glTexImage2D
上调用GLES11Ext.GL_TEXTURE_EXTERNAL_OES
,这不是上面提到的。
从我有限的研究到目前为止,您必须实际绘制到一个框架缓冲器中的OES纹理被绑定到一个texture_2d。从那里,您可以通过帧缓冲区或texture_2d访问像素。
https://stackoverflow.com/questions/42178211
复制相似问题