DWM和Direct3D窗口之间的同步 如果应用程序正在绘制到缓冲区(D3D表面),DWM需要缓冲区重绘屏幕,反之亦然?会发生什么?

DWM和Direct3D窗口之间的同步 如果应用程序正在绘制到缓冲区(D3D表面),DWM需要缓冲区重绘屏幕,反之亦然?会发生什么?,direct3d,dwm,Direct3d,Dwm,是否有任何可用的同步机制?交换链始终有两个或多个缓冲区,并且在任何特定时间,DWM都拥有其中一个缓冲区。如果在出现v-blank时,应用程序未对新帧进行Present()ed,DWM将使用其已有的缓冲区重新绘制最后一帧。同步可以通过使当前队列饱和(大约3次调用后,下一次调用将阻塞到v-blank)或手动调用来实现。在Windows 8.1中,可以使用一种更健壮的机制。没有办法强迫DWM等待应用程序,因为这会挂起整个操作系统的UI。在发布问题后,我在谷歌上做了更多的搜索,找到并发布。他们说,窗口可

是否有任何可用的同步机制?

交换链始终有两个或多个缓冲区,并且在任何特定时间,DWM都拥有其中一个缓冲区。如果在出现v-blank时,应用程序未对新帧进行
Present()
ed,DWM将使用其已有的缓冲区重新绘制最后一帧。同步可以通过使当前队列饱和(大约3次调用后,下一次调用将阻塞到v-blank)或手动调用来实现。在Windows 8.1中,可以使用一种更健壮的机制。没有办法强迫DWM等待应用程序,因为这会挂起整个操作系统的UI。

在发布问题后,我在谷歌上做了更多的搜索,找到并发布。他们说,窗口可以在DWM更新的过程中渲染,所以“结构撕裂”会发生。这仅仅是对一些旧版本Windows的依赖吗?@爱丽丝,看起来这两个链接都承认“结构撕裂”呈现在渲染的中间,例如<代码> Drutangangle();现在();DrawRect()