启用Windows Aero时,与使用没有Aero的基本主题时相比,没有任何屏幕撕裂。
但是,为什么与垂直同步游戏相比,在台式机上进行游戏时输入滞后似乎要大得多?甚至可以关闭V-sync来同步窗口游戏,这比使用游戏内置的任何方法时要好。
为什么以及如何发生或看起来发生这种情况?
启用Windows Aero时,与使用没有Aero的基本主题时相比,没有任何屏幕撕裂。
但是,为什么与垂直同步游戏相比,在台式机上进行游戏时输入滞后似乎要大得多?甚至可以关闭V-sync来同步窗口游戏,这比使用游戏内置的任何方法时要好。
为什么以及如何发生或看起来发生这种情况?
Answers:
实际上,Aero可以避免撕裂而不必在应用程序中强制启用VSYNC的原因是因为它是一个复合窗口管理器。它相对于任何正在运行的应用程序异步绘制桌面和所有窗口。
也就是说,当您在Windows Vista / 7中启用合成(在Windows 8中始终启用合成)时,它将使用从前到后交换的最后一个图像的副本绘制所有窗口。合成器(Microsoft称为DWM,Desktop Window Manager)将启用VSYNC的所有内容进行合成,并且由于它使用最后一个完全交换的前缓冲区图像的副本进行绘制,因此每个窗口从不显示部分绘制的帧。但是,它的确有一个不利的副作用,那就是阻止原本专门设计成可吸入前端缓冲区的旧软件阻止其正常工作-但是现代软件却无法做到这一点。
简而言之,DWM增加了一层防撕裂保护。它可以使系统上运行的任何应用程序以一定的速率绘制,而与显示器的刷新率无关,并且仍然可以防止撕裂。在这样的系统上,在窗口模式下,在OpenGL或Direct3D中启用VSYNC的唯一好处是实际上限制了CPU / GPU的利用率。
这就是创建自适应VSYNC的原因,它的想法是不对不能维持显示器刷新率的应用程序施加不利影响,方法是将其强制设为较低的刷新率因子(例如60 Hz-> 30、20、15、10、12 ,6、5、4、3、2、1),但是为了限制绘图速度比监视器快的应用程序可以使用过多的CPU / GPU功能来显示图像。
启用Aero时,Desktop Window Manager使用双重缓冲:
Windows Aero功能广泛使用双缓冲在屏幕上绘制。
维基百科有这样的说法:如何将其与V-sync配合使用以防止屏幕撕裂:
在垂直消隐间隔内,驱动程序命令视频卡将屏幕外图形区域快速复制到活动显示区域(双缓冲),或将两个内存区域都视为可显示区域,然后在它们之间来回切换(页面)翻转)。