簡體   English   中英

全屏Direct3D9設備僅在插入第二台顯示器時以原始分辨率顯示

[英]Full screen Direct3D9 device only displays at native resolution when second monitor is plugged in

使用單個監視器,我的程序可以在窗口模式和全屏模式下運行(使用從EnumAdapterModes中選擇的任何分辨率),但是當我插入第二個監視器(運行相同的代碼)時,我可以從EnumAdapterModes以任何分辨率創建全屏設備,但它只能以原始分辨率(1600 x 900)來顯示場景,否則屏幕只是黑色,這是下面列出的其他問題。

到目前為止,我發現了什么:

  • 在窗口或多頭模式下不會發生此問題
  • 我仍然可以渲染到紋理(盡管我不得不切換模式才能顯示它)
  • 所有函數調用均返回成功代碼(包括TestCooperativeLevel)
  • 如果我嘗試使用Clear或DrawPrimitive函數繪制到后台緩沖區或調用Present(仍然留下黑屏),則對GetRenderTargetData的調用將失敗,並且嘗試鎖定體積紋理將在子級別返回不同的切片間距
  • 使用Direct3D9(Portal)的商業游戲在插入第二台顯示器的情況下在分辨率之間進行切換沒有任何問題,因此必須有解決方案

問題似乎與Direct3D9運行時創建的后台緩沖區有關,但我唯一能想到的解決方案是在具有多個監視器的設備上強制采用多頭模式,有什么想法嗎?

這個問題似乎也存在相同的問題,但缺乏解決方案: 如何以與顯示器不同的分辨率渲染全屏框架?

終於弄清楚了,似乎是Windows Vista和更高版本中的驅動程序錯誤,並使用Direct3D9Ex修復了該問題。

我不想使用Direct3D9Ex,因為它只是在Windows Vista上引入的,並且我希望至少支持Windows XP,但是MSDN上有一些示例代碼說明了如何支持這兩種,所以都很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM