有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (1) 个答案

  1. # 1 楼答案

    实际上,一旦您了解了缓冲策略的好处,就很容易理解了。 让我们简单地看看这三种情况会发生什么。


    单缓冲中只有一个显示器可以写入图像数据。相比之下,双缓冲有两个显示s,前缓冲后缓冲

    通常情况下,应用程序的渲染和逻辑进程会被拆分并并行运行(例如,监视器和图形卡)。假设渲染过程的轮询率为每15毫秒在监视器上显示一幅图像。假设逻辑过程当前正在执行一些图像操作(绘制圆),但此时尚未完成(圆仅绘制了一半)。在单缓冲中当渲染过程显示未完成的图像时,您现在将在屏幕上看到一个半圆

    双缓冲中,逻辑进程将仅写入后缓冲区,并且只有在结束绘图进程后,才会将后缓冲区标记为已完成。然后将后缓冲区的内容与前缓冲区交换,渲染过程现在将显示完成的图像,您将不会看到任何瑕疵

    Illustration of double buffering

    因此,双缓冲的优点是,用户不会看到任何人工制品,也不会体验到闪烁之类的东西。 然而,这是以增加运行时间(交换操作)为代价的,尤其是空间成本的增加(整个图像的2倍)


    现在,三重缓冲的成本甚至更高(3倍图像空间),但它将加快处理速度。这里有两个后缓冲和一个前缓冲

    假设您使用了双缓冲,当前正在将后缓冲替换为前缓冲,因为您刚刚完成了一个绘图操作。这可能需要一些时间,同时图形卡(速度非常快-比交换缓冲区的软件代码快)可以开始下一次绘图操作,但不能开始,因为缓冲区被阻止

    使用三重缓冲时,图形卡现在可以开始绘制到另一个缓冲,因为一个后缓冲始终是空闲的,并且不涉及任何交换机制


    既然我们知道了事情是如何运作的,那么也很清楚为什么您没有看到超过3个缓冲区的缓冲区解决方案(至少在普通应用中没有)-从一般概念的角度来看,它没有任何好处

    在处理3D虚拟现实内容(立体图像)时,可以看到缓冲区数量的增加。例如,您可以对左通道和右通道分别使用双缓冲区,最后总共使用四缓冲区

    作为最后一个旁注,vsync意味着将前缓冲区的交换与监视器的轮询速率同步,以最小化撕裂效应