0

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

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

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

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

似乎有同样问题但缺乏解决方案的问题:如何渲染分辨率与显示器不同的全屏帧?

4

1 回答 1

0

终于弄清楚了,似乎是 Windows Vista 及更高版本中的驱动程序错误,使用 Direct3D9Ex 解决了该问题。

我不想使用 Direct3D9Ex,因为它只在 Windows Vista 上引入,我希望至少支持 Windows XP,但是 MSDN 有一些关于如何支持两者的示例代码,所以一切都很好。

于 2013-12-26T01:23:54.770 回答