将FBO混合到默认帧缓冲区上
Blend FBO onto default framebuffer
要澄清的是,当我说"默认帧缓冲区"时,我指的是窗口系统提供的缓冲区,以及最终在监视器上显示的内容。
为了提高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
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- C++字符*缓冲区的大小
- 如何使用默认参数等选择模板专业化
- 具有默认模板参数的多态类的模板推导失败
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 初始化具有非默认构造函数的std::数组项的更好方法
- 何时提供默认参数作为模板参数
- DirectX 顶点缓冲区默认与默认 + 暂存
- libstdc++ 中的默认缓冲区大小为 basic_filebuf
- 是否可以仅使用OpenGL来确定默认帧缓冲区的大小
- 将FBO混合到默认帧缓冲区上
- 延迟渲染:使用默认framebuffer中Gbuffer的深度缓冲区
- 是否有可能在Windows 7中抓取指向默认音频端点设备缓冲区的指针?
- 对stdout的默认缓冲区大小感到困惑
- 流缓冲区中的默认内容