将FBO混合到默认帧缓冲区上

Blend FBO onto default framebuffer

本文关键字:缓冲区 默认 FBO 混合      更新时间:2023-10-16

要澄清的是,当我说"默认帧缓冲区"时,我指的是窗口系统提供的缓冲区,以及最终在监视器上显示的内容。

为了提高CAD应用程序的渲染速度,我设法将3D元素从Qt处理的2D元素中分离出来,现在它们各自渲染到自己的FBO中。当他们出现在屏幕上的时候,我把3D FBO闪电式地放在默认的FB上,然后我想把我的2D FBO混合在上面。

我已经很好地完成了闪电战部分,但我不知道如何将我的2D FBO融入其中?两个FBO的大小和格式相同,并且都与默认FB相同。

我确信这是一个简单的操作,但我在网上找不到任何东西-大概我错过了我要做的事情的正确术语。虽然我使用的是Qt,但我可以毫无问题地使用本机OpenGL命令。

blit操作最终是像素复制操作。如果你想将一个图像叠加在另一个图像上,你不能对其进行闪电战。你必须将全屏四边形渲染为纹理,并在混合操作中使用适当的混合参数。

您可以使用GL_EXT_framebuffer_blit来将帧缓冲区对象的内容blit到应用程序帧缓冲区(或任何其他)。尽管,正如规范所述,不可能使用混合:

像素副本绕过片段管道。唯一的碎片影响blit的操作是像素所有权测试和剪刀测试。

因此,任何混合都意味着按照建议使用片段着色器。一个全屏通过与混合应该相当便宜,我相信没有什么可担心的。

使用着色器从帧缓冲区读回。这是OpenGL ES的扩展,并非所有硬件都支持。

https://www.khronos.org/registry/gles/extensions/EXT/EXT_shader_framebuffer_fetch.txt