【问题标题】:Why is the mouse cursor drawn faster than applications?为什么鼠标光标的绘制速度比应用程序快?
【发布时间】:2018-02-16 18:59:29
【问题描述】:

我注意到的一件事(至少在 Windows 上)是鼠标光标的绘制延迟甚至比标准 Windows 元素要少得多。

一个很好的例子是开始在桌面上拖动。您可以很容易地注意到拖动矩形明显落后于光标。

我的第一个问题是:为什么会这样?

我无法想象绘制一个矩形比绘制光标要贵得多。当然不是一两帧。

我的第二个问题是,是否有可能将一个应用程序的 1:1 渲染与光标输入相匹配?

一个很好的用例是这个选择矩形,或可拖动项目的拖动预览。两者都大大落后于操作系统鼠标指针(独立于使用的任何框架或库)。

【问题讨论】:

标签: windows winapi rendering


【解决方案1】:

在我的系统上使用选择矩形选择桌面上的图标并没有那么慢(DWM 开启),它有点滞后但不足以让我真正关心。

“在拖动时显示窗口内容”选项一直很慢,这就是为什么它在旧 Windows 版本中默认不启用的原因。

另一方面,鼠标光标可以直接由您的硬件渲染。也就是说,Windows 将光标图像发送到您的显卡,之后 Windows 只需告诉显卡光标位置,这比您调整窗口大小和绘制窗口时涉及的所有消息和用户/内核上下文切换要快得多。鼠标驱动程序可能使用的硬件中断/定时器的优先级也高于普通软件。

您可以尝试使用registry hack 禁用硬件光标,但 HID/鼠标驱动程序和 win32k 中的原始输入线程的优先级仍然高于您的应用程序。

【讨论】:

  • 此外,窗口不会直接绘制到屏幕缓冲区,而是首先绘制到一个后缓冲区,该缓冲区仅在延迟 1/MonitorRefreshRate 后才复制到屏幕(这也称为交换链)。相反,鼠标光标立即被图形卡绘制为覆盖。因此,即使 Windows 消息等的开销可以忽略不计,这个 1/MonitorRefreshRate 延迟也将始终存在。
猜你喜欢
  • 2012-08-20
  • 2011-04-04
  • 2020-08-27
  • 2021-09-04
  • 2016-05-23
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
相关资源
最近更新 更多