由于电影的帧率等特性,对于播放器最优的播放策略不应该是总是60hz,故在此状况下我们创建显示设备要指定分辨率和刷新率,在这个过程中实际上d3d CreateDevice实际调用了windows API来实现显示设备的改变 ChangeDisplaySettingsExW, 但潜在有莫名奇妙的问题,或许是我的bug,也或许是ms的bug,即在我的应用里面必须在同步处理WM_DISPLAYCHANGE消息时候必须sleep一定的时间,否则在PresentImage图像的时候会出现 设备丢失错误,原因不明。
为了规避这个错误,我们将 一些工作从D3D移到外面解决,即先初始化环境直接调用ChangeDisplaySettingsExW,而不是由CreateDevice来调用,问题解决,但具体为什么不行,由于黑盒子无法确认,google一下,发现很多人面临同样的尴尬。