gpt4 book ai didi

android - framebuffer OES 不完整,android

转载 作者:太空狗 更新时间:2023-10-29 14:44:30 24 4
gpt4 key购买 nike

我需要一些帮助来弄清楚我在尝试创建帧缓冲区 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。

我已经尝试并成功地使用绑定(bind)到帧缓冲区的 TEXTURE_2D一切都使用普通的帧缓冲区工作。

所以我需要一些帮助,要么是我在代码中做错了什么,要么是找到另一种方法(可能使用普通的帧缓冲区)从 GPU 获取 TEXTURE EXTERNAL OES。

非常感谢。

最佳答案

来自man关于 glTexImage2D 的目标 [第一个参数] 的页面:

Specifies the target texture of the active texture unit.

Must be 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, or
GL_T EXTURE_CUBE_MAP_NEGATIVE_Z.

您正在尝试在 GLES11Ext.GL_TEXTURE_EXTERNAL_OES 上调用 glTexImage2D,这不是上述之一。

根据我迄今为止有限的研究,您必须实际将 OES 纹理绘制到绑定(bind)到 texture_2d 的帧缓冲区中。从那里您可以通过帧缓冲区或 texture_2d 访问像素。

关于android - framebuffer OES 不完整,android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42178211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com