gpt4 book ai didi

ios - 在 OpenGL ES 中绑定(bind)多个缓冲区

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:51:57 25 4
gpt4 key购买 nike

可以在 OpenGL ES 中绑定(bind)多个帧缓冲区和渲染缓冲区吗?我正在渲染到屏幕外帧缓冲区/渲染缓冲区中,并且更愿意只使用我现有的渲染代码。

这是我目前正在做的事情:

// create/bind framebuffer and renderbuffer (for screen display)

// render all content

// create/bind framebuffer2 and renderbuffer2 (for off-screen rendering)

// render all content again (would like to skip this)

这是我想做的:

// create/bind framebuffer and renderbuffer (for screen display)

// create/bind framebuffer2 and renderbuffer2 (for off-screen rendering)

// render all content (only once)

这可能吗?

最佳答案

您不能一次渲染到多个帧缓冲区。您可以使用 MRT 渲染到属于同一 FBO 的多个渲染目标(纹理/渲染缓冲区),方法是在片段着色器中放置多种颜色,但不能渲染到多个 FBO,例如屏幕外 FBO 和默认帧缓冲区。但是,如果我得到的信息是正确的,无论如何,ES 目前不支持 MRT。

但在您的情况下,您仍然不需要渲染场景两次。如果您无论如何都需要在屏幕外渲染缓冲区中使用它,为什么不使用纹理而不是渲染缓冲区来保存屏幕外数据(应该没有什么区别)。这样,您只需将场景渲染到屏幕外缓冲区(纹理)中一次,然后通过使用简单的直通片段着色器绘制一个简单的纹理四边形,将此纹理显示到屏幕帧缓冲区。

不过,在 OpenGL ES 中,如果您使用渲染缓冲区或纹理来保存屏幕外数据,可能会有所不同,因为 ES 没有 glGetTexImage。因此,如果您需要将屏幕外数据复制到 CPU,您将无法绕过 glReadPixels,因此需要一个渲染缓冲区。但在这种情况下,您仍然不需要两次渲染场景。您只需引入另一个带有纹理的 FBO。因此,您使用此 FBO 将场景一次渲染到纹理中,然后将此纹理渲染到 offsrceen FBO 和屏幕帧缓冲区中。这可能仍然比绘制整个场景两次更快,尽管只有评估才能告诉您。

但是如果需要将数据copy到CPU处理,也可以直接从screen framebuffer中copy出来,不需要offscreen FBO。如果您只需要基于 GPU 的处理的屏幕外数据,那么无论如何纹理都比渲染缓冲区好。所以如果你真的需要一个额外的屏幕外缓冲区,如果它只包含与屏幕帧缓冲区相同的数据,那么推理可能是有用的。这可能会使整个问题变得过时。

关于ios - 在 OpenGL ES 中绑定(bind)多个缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7892811/

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