鼠标点击操作实际上如何传递到显示器?【全流程图解】

鼠标点击操作实际上如何传递到显示器?下图分解了管线的各个阶段。请注意,虽然这些阶段之间存在重叠,但它们一定会按照从左到右的顺序开始和完成。

流程图

我们来分别介绍上图中第二行的每个框。请注意,框的大小并未按比例。

为简单起见,我们将重点关注鼠标,但以下所有内容均适用于连接到 PC 的各种 USB 外设。

  • 鼠标硬件 – 在鼠标准备沿导线发送事件时,此硬件被定义为第一个电接触点。在鼠标中,有几个例程(如防抖)会给鼠标按键按下事件增加延迟。请注意,防抖例程很重要,它可防止您在不想点击鼠标时点击鼠标。这些额外的点击通常称为双击 – 由于防抖例程过于激进,此时会发送两次点击而不是一次。延迟并不是鼠标性能的唯一关键特性。

  • 鼠标 USB 硬件 – 一旦完成防抖,鼠标必须等待下次轮询,以便沿导线发送数据包。此时间会在 USB 硬件中反映出来。

  • 鼠标 USB 软件 – 鼠标 USB 软件是指操作系统和鼠标驱动处理 USB 数据包所需的时间。

  • 采样 – 点击操作根据鼠标的轮询速率进入操作系统中,此时它们可能要等待下一次机会才能让游戏进行采样。该等待时间称为采样延迟。此延迟可以根据 CPU 频率增大或缩小。

  • 模拟 – 游戏必须不断更新游戏世界的状态。此更新通常称为模拟。模拟包括更新动画、游戏状态和玩家输入导致的变化等工作。模拟是将鼠标输入应用于游戏状态的阶段。

  • 渲染提交 – 随着模拟确定清楚在下一帧中的哪个地方放置相关项,它将开始向图形 API 运行时发送渲染作业。该运行时接着将渲染命令传递给图形驱动。

  • 图形驱动 – 图形驱动负责与 GPU 通信并向其发送命令分组。根据图形 API 的不同,驱动可能会为开发者进行此分组,或者开发者可能要负责对渲染作业进行分组。

  • 渲染队列 – 在驱动提交要让 GPU 执行的作业后,该作业会进入渲染队列。渲染队列的目的是:通过使缓冲区内始终放有需要 GPU 执行的作业,不断向 GPU 提供作业。这有助于更大限度提高 FPS(吞吐量),但可能会带来延迟。

  • 渲染 – GPU 渲染与单个帧相关的所有作业所需的时间。

  • 合成 – 根据显示模式(全屏、无边框、窗口化)的不同,操作系统中的桌面窗口管理器 (DWM) 必须提交另一些渲染作业,以合成特定帧的其余桌面部分。这可能会增加延迟。建议始终处于独占全屏模式,以更大限度地减小合成延迟!

  • 扫描输出 – 合成完成后,最终的帧缓存就已经为显示做好了准备。GPU会指示帧缓存已经可以被显示并更换要读取的帧缓存,以便进行扫描输出。如果启用了垂直同步,帧缓存中的这一“翻转”操作将因为必须等待显示器的垂直同步信号而暂停。准备就绪后,GPU 会根据显示器的刷新率 (Hz),逐行将下一帧画面送入显示器。鉴于扫描输出是刷新率函数,我们将其包含在“显示延迟”中。

  • 显示处理 – 显示处理是指显示器处理传入帧(扫描线)和发起像素响应所需的时间。

  • 像素响应 – 这是指像素从一种颜色变为下一种颜色所需的时间。由于像素是真正的液晶,因此需要时间进行更改。像素响应时间可能取决于所需更改的强度,也将取决于面板技术。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值