快速交换帧缓冲区 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的主要内容,如果未能解决你的问题,请参考以下文章