将FBO混合到默认帧缓冲区

时间:2012-01-23 13:17:42

标签: c++ qt opengl framebuffer

澄清一下,当我说'默认帧缓冲'时,我的意思是窗口系统提供的那个以及显示器上的内容。

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

我已经很好地完成了blitting部分,但我看不出如何将2D FBO混合到它上面?两个FBO的大小和格式都相同,它们都与默认FB相同。

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

3 个答案:

答案 0 :(得分:7)

blit操作最终是像素复制操作。如果你想将一个图像叠加在另一个图像之上,则不能将其加入blit。您必须将全屏四边形渲染为纹理,并使用proper blending parameters进行混合操作。

答案 1 :(得分:1)

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

  

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

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

答案 2 :(得分:0)

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

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