gpt4 book ai didi

android - 使用目标 GL_TEXTURE_2D 在纹理上渲染相机预览

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:06 24 4
gpt4 key购买 nike

我正在尝试在目标 GL_TEXTURE_2D 的 OpenGL 纹理上渲染相机预览。我非常了解 SurfaceTexture,但我无法使用它,因为它仅适用于 GL_TEXTURE_EXTERNAL_OES。在 SurfaceTexture 的文档中,它是这样写的:

 Each time the texture is bound it must be bound to the GL_TEXTURE_EXTERNAL_OES target rather than the GL_TEXTURE_2D target

我不能使用 GL_TEXTURE_EXTERNAL_OES,因为我必须对现有代码进行大量更改。

有没有一种方法可以快速实现这一点?

最佳答案

我能想到的唯一方法是听取 SurfaceTexture,当新帧出现时,您只需在 GL_TEXTURE_2D 目标上重新绘制它。

谈到 OpenGL ES 领域时,事情会变得非常复杂。让我尝试以我有限的经验向您解释这一点。下面是一些伪代码。

  1. 如果您想将相机数据渲染到屏幕外纹理,您将需要一个屏幕外帧缓冲区。您可能需要的一些功能。

    GLES20.glGenTextures(1, textures, 0);
    GLES20.glGenFramebuffers(1, frames, 0);
    GLES20.glGenRenderbuffers(1, frameRender, 0);
    GLES20.glActiveTexture(ActiveTexture);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);
    GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA,
    width, height, 0, GLES20.GL_RGBA,
    GLES20.GL_UNSIGNED_BYTE, directIntBuffer);
    GLES20.glBindRenderbuffer(GLES20.GL_RENDERBUFFER,
    frameRender[0]);
    GLES20.glRenderbufferStorage(GLES20.GL_RENDERBUFFER,
    GLES20.GL_DEPTH_COMPONENT16, width, height);
    GLES20.glViewport(0, 0, width, height);
    GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, frames[0]);
    GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER,
    GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D,
    textures[0], 0);
    GLES20.glFramebufferRenderbuffer(GLES20.GL_FRAMEBUFFER,
    GLES20.GL_DEPTH_ATTACHMENT, GLES20.GL_RENDERBUFFER,
    frameRender[0]);
  2. 编译您的vertexfragment 着色器并链接您的程序

  3. 准备您的vertextextureCoordinatesdrawList 缓冲区。
  4. 将您的 SurfaceTexture 从相机绑定(bind)到某个 GL_TEXTURE

    GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, cameraSurfaceTextureHandle);
  5. GLES20.glUseProgram(yourProgram),将以上所有链接在一起,然后GLES20.glDrawElements

关于android - 使用目标 GL_TEXTURE_2D 在纹理上渲染相机预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29003414/

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