快速交换帧缓冲区 OpenGL

Posted

技术标签:

【中文标题】快速交换帧缓冲区 OpenGL【英文标题】:Fast swapping framebuffers OpenGL 【发布时间】:2011-05-22 10:51:06 【问题描述】:

我最近读到,简单地切换帧缓冲区对象的渲染目标比切换帧缓冲区对象快得多。

听起来很极端,这是否意味着我应该只使用一个帧缓冲区对象并且只切换它的目标?

编辑:我将“交换”更改为“切换”以避免混淆。通过切换我的意思是绑定一个新的帧缓冲区来代替旧的。不要与用于交换前后缓冲区的 SwapBuffers() 调用混淆。

【问题讨论】:

你在哪里读到的?除非您的驱动程序中存在错误,否则交换帧缓冲区应该不会花费任何时间 songho.ca/opengl/gl_fbo.html 概述部分的最后一段。 帧缓冲区与帧缓冲区对象不同。这篇文章谈到了 FBO。 我的印象是它们的意思相同。 OpenGL 正式称它们为帧缓冲区对象,而我在规范中找不到任何关于“帧缓冲区”的内容。 在文章开头解释了不同之处。 【参考方案1】:

编辑:这个答案可能是错误的。阅读下面的 cmets。

切换可附加帧缓冲区的纹理比在帧缓冲区 (FBO) 之间切换要快。更多这里http://www.songho.ca/opengl/gl_fbo.html

但一个 FBO 可以拥有的附件数量是有限制的。

【讨论】:

啊,所以您在已经附加到该帧缓冲区的纹理之间切换? @Hannesh 是的,这基本上是文章所推荐的。不过还没有进行广泛的测试。 互联网上有多少直接冲突的信息非常有趣。另一个 SO answer 描述了完全相反的情况。 这似乎未经证实。链接的文章没有提供时间示例,也没有解释为什么会这样。有效地编写了 OpenGL 驱动程序后,我可以告诉您,在帧缓冲区之间切换应该比切换附件更快。原因是如果一整套标准为真,则帧缓冲区仅是complete。每次更改附件时,都需要检查所有这些条件。另一方面,已经检查过的帧缓冲区不需要再次检查。 QED 切换帧缓冲区应该更快。 gman 说了什么。从 Valve 的 OpenGL 演讲和 John McDonald/Cass Everitt 的演讲(不记得是两者都提到还是只提到了一个),FBO 验证可能需要“很长时间”,而切换已经预先验证的 FBO 成本更低。

以上是关于快速交换帧缓冲区 OpenGL的主要内容,如果未能解决你的问题,请参考以下文章

防止 OpenGL 缓冲帧

助你快速理解交换机端口之access

许多OpenGL绘图区域交换缓冲区减速问题

帧缓冲区和交换链到底是啥?

在 OpenGL 中使用持久映射的缓冲区存储,仅在绘制之前和交换之后接触,是不是真的需要进一步的同步?

与另一个单独的进程共享来自交换链后台缓冲区的 direct3d11 渲染帧作为纹理