Windows Aero 如何防止屏幕撕裂?

Nor*_*ers 16 windows windows-7 windows-vista aero

与使用不带 Aero 的基本主题时相比,当 Windows Aero 开启时,不会出现任何屏幕撕裂现象。

但是,为什么垂直同步的游戏似乎比在桌面上执行某些操作时具有更大的输入延迟?它甚至似乎可以在关闭 V-sync 的情况下同步窗口游戏,比使用游戏中内置的任何方法更好。

为什么以及如何发生这种情况,或似乎会发生?

And*_*man 10

实际上,Aero 可以防止撕裂而不必在应用程序中强制启用 VSYNC 的原因是因为它是一个合成窗口管理器。它相对于任何正在运行的应用程序异步绘制桌面和所有窗口。

也就是说,当您在 Windows Vista / 7 中启用合成(在 Windows 8 中始终启用)时,它将使用从后向前交换的最后一个图像的副本绘制所有窗口。合成器(微软称之为 DWM,桌面窗口管理器)在启用 VSYNC 的情况下合成所有内容,并且因为它使用每个窗口的最后一个完全交换的前缓冲区图像的副本进行绘制,所以它从不显示部分绘制的帧。然而,它确实有一个不幸的副作用,它会阻止专门用于吸引前端缓冲区的旧软件正常工作 - 但现代软件不会这样做。

简而言之,DWM 增加了一层额外的防撕裂保护。一种允许在系统上运行的任何应用程序以不考虑显示器的刷新率的速率绘制并且仍然可以防止撕裂。在这样的系统上,在窗口模式下,在 OpenGL 或 Direct3D 中启用 VSYNC 的唯一好处实际上是节流 CPU/GPU 利用率。

这就是创建自适应 VSYNC 的原因,其想法不是通过强制应用程序进入较低的刷新率因子(例如 60 Hz --> 30、20、15、10、12)来惩罚无法维持显示器刷新率的应用程序, 6, 5, 4, 3, 2, 1) 但为了限制绘图速度快于显示器的应用程序可以使用过多的 CPU / GPU 功率来显示图像。


bwD*_*aco 5

启用 Aero 后,桌面窗口管理器使用双缓冲

Windows Aero 功能广泛使用双缓冲在屏幕上绘图。

来源

维基百科关于如何将其与 V-sync 一起使用以防止屏幕撕裂的说法是这样的:

在垂直消隐间隔期间,驱动程序命令显卡要么快速将屏幕外图形区域复制到活动显示区域(双缓冲),要么将两个内存区域都视为可显示,并在它们之间简单地来回切换(页面翻转)。

  • 双缓冲不能防止撕裂,它可以防止用户看到正在渲染的东西。如果您使用双缓冲并且在屏幕刷新过程中进行翻页,您仍然会感到撕裂。 (6认同)