假设我们使用双缓冲。我们首先将帧写入后台缓冲区,然后将其交换到前台缓冲区进行显示。
这里有 2 个场景,我认为它们具有相同的结果。
假设我们清除后台缓冲区,然后将新帧写入后台缓冲区。将其交换到前缓冲区中。
现在假设我们没有清除后台缓冲区,后台缓冲区无论如何都会被新帧覆盖。最后两个缓冲区将被交换。
因此,假设我是对的,只要我们使用双缓冲,无论是否清除缓冲区,两者最终都会得到相同的显示,这是真的吗?
如果我们不清除缓冲区,是否会出现任何可能的渲染伪影?
最佳答案
第二种方法的关键在于这个假设:
the back buffer will be overwritten with a new frame
我假设我们正在讨论 OpenGL 帧缓冲区,其中包含颜色值、深度、模板等。它们在下一帧中将如何被覆盖?
渲染代码会进行恒定的深度比较,因此请查看需要绘制哪些对象。使用旧的帧深度数据,一切都会变得困惑。如果您渲染任何半透明项目并启用混合,也会发生同样的情况。
清除缓冲区是将所有内容重置为零(或您需要的任何其他特定值)的最快方法。
有些技术依赖于缓冲区不被清除(考虑到这被验证为平台上的昂贵操作)。例如,没有透明几何体,后面没有不透明几何体,并在 0-0.5/0.5-1.0 范围内切换深度测试较小/较大,以使其始终覆盖旧帧值。
关于opengl - 如果使用双缓冲,是否需要清除缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35917348/