Windows Aero 如何防止屏幕撕裂?

Windows Aero 如何防止屏幕撕裂?

当 Windows Aero 开启时,不会出现任何屏幕撕裂,与使用没有 Aero 的基本主题时不同。

但是,为什么使用垂直同步的游戏似乎比在桌面上玩游戏时输入延迟大得多?它甚至似乎可以在关闭垂直同步的情况下同步窗口游戏,效果比使用游戏内置的任何方法都要好。

为什么会发生这种情况,或者似乎会发生这种情况?

答案1

实际上,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 功率。

答案2

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

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

来源

维基百科关于如何将其与 V-sync 一起使用以防止屏幕撕裂,有以下说明:

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

答案3

双缓冲 + V-sync 开启不会造成撕裂。Aero 恰好使用该配置。

答案4

DWM(启用 Aero 效果的技术)将屏幕上的所有内容渲染为 D3D 表面(这使得视频可以在 Flip 上继续播放)。此渲染技术会自动阻止撕裂,尽管游戏方法应该比通用 DWM 方法更好(毕竟这是他们自己的引擎)。因此,游戏方法很可能一开始就不是那么好,或者没有针对您的配置进行优化。

相关内容