如果我将Direct3D9中的显示间隔设置为D3DPRESENT_INTERVAL_ONE,当我调用Present时,它会等待显示器更新。它总是等待正确的数量,并且(可能)不使用自旋锁。
我希望能够做同样的事情"等待" Present目前在Direct3D9中,但我不想使用Direct3D。如何在不使用自旋锁的情况下完全等待vsync?可以在没有Direct3D的情况下编程等待吗?
答案 0 :(得分:1)
与垂直回扫的同步由驱动程序以设备相关的方式处理。存在一些实现只是忙等待,轮询一些设备寄存器直到它检测到回扫间隔的开始并不是不可想象的。替代方案是等待设备中断,这会释放CPU以执行其他任务,但由于必要的内核模式/用户模式转换而增加了延迟。驾驶员也可以通过估计回扫时间,睡眠时间少于该时间然后忙碌等待来实现混合方法。
我不知道这三种可能的实现中哪一种是典型的,但它并不重要。 Windows不为Windows应用程序提供任何独立于设备的方法,以便与DirectX之外的虚拟回溯同步(我猜OpenGL)。与视频卡驱动程序不同,应用程序无法直接访问硬件,因此无法读取设备寄存器,也无法请求或处理中断。