【问题标题】:How does D3D9's Presentation Interval work?D3D9 的演示间隔如何工作?
【发布时间】:2014-11-14 05:10:14
【问题描述】:

如果我将 Direct3D9 中的显示间隔设置为 D3DPRESENT_INTERVAL_ONE,当我调用 Present 时,它会等到监视器更新。它总是等待正确的数量并且(大概)不使用自旋锁。

我希望能够像 Present 在 Direct3D9 中一样进行“等待”,但是我不想使用 Direct3D。在不使用自旋锁的情况下,它究竟如何完美地等待 vsync?没有 Direct3D 可以只编程等待吗?

【问题讨论】:

    标签: direct3d


    【解决方案1】:

    与垂直回扫的同步由驱动程序以设备相关的方式处理。有一些实现只是忙等待,轮询一些设备寄存器直到它检测到回溯间隔的开始,这并不是不可想象的。另一种方法是在设备中断上等待睡眠,这可以释放 CPU 用于其他任务,但由于必要的内核模式/用户模式转换而增加了延迟。驱动程序也可以通过估计回溯的时间来实现混合方法,睡眠时间少于该时间,然后忙于等待。

    我不知道这三种可能的实现中哪一种是典型的,但这并不重要。 Windows 没有为 Windows 应用程序提供任何与设备无关的方法来与 DirectX 之外的虚拟回溯同步(我猜是 OpenGL)。与视频卡驱动程序不同,应用程序无法直接访问硬件,因此无法读取设备寄存器,也无法请求或处理中断。

    【讨论】:

      猜你喜欢
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 2023-04-09
      • 2017-03-10
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多