gpt4 book ai didi

android 从 GL_TEXTURE_EXTERNAL_OES 读取像素

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:32 24 4
gpt4 key购买 nike

我正在尝试从绑定(bind)到 GL_TEXTURE_EXTERNAL_OES 的 OpenGL 纹理读取像素/数据。

将纹理绑定(bind)到该目标的原因是因为为了在 android 上获得实时摄像头反馈,需要从绑定(bind)到 GL_TEXTURE_EXTERNAL_OES 的 OpenGL 纹理创建 SurfaceTexture。

由于 android 使用 OpenGL ES 我不能使用 glGetTexImage() 来读取图像数据。

因此我将目标绑定(bind)到 FBO,然后使用 readPixels() 读取它。这是我的代码:

    GLuint framebuffer;
glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);

//Attach 2D texture to this FBO
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_EXTERNAL_OES, cameraTexture, 0);
status("glFramebufferTexture2D() returned error %d", glGetError());

但是由于某种原因我收到错误 1282 (GL_INVALID_OPERATION)。

最佳答案

我认为这可能是问题所在:

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_EXTERNAL_OES, cameraTexture, 0);

您不应将 cameraTexture 附加到帧缓冲区,而应生成 GL_TEXTURE_2D 格式的新纹理

glGenTextures(1, mTextureHandle, 0);

glBindTexture(GL_TEXTURE_2D, mTextureHandle[0]);

...

cameraTexture 是您从 SurfaceTexture 获得的,它是用于渲染的源。这个新纹理是您应该渲染的纹理(稍后可以在渲染管道中使用)。然后这样做:

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, mTextureHandle[0], 0);

cameraTexture被绘制到framebuffer的attached texture上,使用一个简单的shader程序绘制,使用shader程序时绑定(bind)cameraTexture:

glBindTexture(GL_TEXTURE_EXTERNAL_OES, cameraTexture); 

关于android 从 GL_TEXTURE_EXTERNAL_OES 读取像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23256991/

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