全屏Direct3D9设备仅在插入第二台显示器时以原始分辨率显示

时间:2013-12-21 22:25:22

标签: c++ visual-c++ direct3d direct3d9 multiple-monitors

使用单个显示器,我的程序可以在窗口和全屏模式下工作(使用从EnumAdapterModes中选择的任何分辨率),但是当我插入第二台显示器(运行相同的代码)时,我可以创建任何分辨率的全屏设备来自EnumAdapterModes,但仅在原始分辨率(1600 x 900)下显示场景,否则屏幕在下面列出的其他问题中只是黑色。

到目前为止我发现了什么:

  • 在窗口或多头模式下不会发生此问题
  • 我仍然可以渲染到纹理(我不得不切换模式来显示它)
  • 所有函数调用返回成功代码(包括TestCooperativeLevel)
  • 如果我尝试使用Clear或DrawPrimitive函数绘制到后台缓冲区或调用Present(仍然留下黑屏),则调用GetRenderTargetData失败并尝试锁定卷纹理将返回子级别的不同切片间距
  • 使用Direct3D9(Portal)的商业游戏在我插入第二台显示器的情况下切换分辨率没有任何问题,因此必须有解决方案

问题似乎与Direct3D9运行时创建的后台缓冲区有关,但我能想到的唯一解决方案是在具有多个监视器的设备上强制执行多头模式,有什么想法吗?

似乎有同样问题但缺乏解决方案的问题:How do I render a fullscreen frame with a different resolution than my display?

1 个答案:

答案 0 :(得分:0)

最后想通了,似乎是Windows Vista中的驱动程序错误以及后来使用Direct3D9Ex解决了这个问题。

我不想使用Direct3D9Ex,因为它仅在Windows Vista上引入,我想支持Windows XP,但MSDN有一些示例代码,说明如何支持这两者,所以这一切都很好。