DWM和Direct3D窗口之间的同步

时间:2014-01-16 05:44:08

标签: direct3d dwm

如果应用程序正在绘制缓冲区(d3d曲面)并且DWM需要缓冲区重绘屏幕,反之亦然,会发生什么?

是否有可用的同步机制?

1 个答案:

答案 0 :(得分:0)

交换链总是有两个或更多缓冲区,在任何特定时间,DWM都拥有其中一个缓冲区。如果应用程序在v-blank发生时没有Present()新帧,则DWM使用已有的缓冲区重绘最后一帧。可以通过使当前队列饱和来实现同步(在大约3次调用之后,下一次调用将阻塞直到空白),或者通过手动调用WaitForVBlank来实现。在Windows 8.1中,使用IDXGISwapChain2::GetFrameLatencyWaitableObject可以使用更强大的机制。没有办法强制DWM等待应用程序,因为这会挂起整个操作系统UI。