繁体   English   中英

将FBO混合到默认帧缓冲区

[英]Blend FBO onto default framebuffer

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM