2012-03-01 79 views
3

我正在用C++編寫一個程序,使用directx 11作爲我的圖形。我的筆記本電腦有一個輕巧的英特爾圖形卡,用於延長我的電池壽命,應該只用於「輕量級」圖形。我還安裝了另一個功能更強大的視頻卡。C++ Directx 11多個視頻卡

我想知道如何指定哪個視頻卡在DirectX中使用?當我創建設備來指定在我的代碼中使用哪個卡時,有沒有辦法?

感謝

+1

我不知道你的問題的答案,但真正的解決方案是:不這樣做。 DirectX將自動使用正確的圖形卡,由用戶在操作系統設置中選擇。如果還有第二塊顯卡,很有可能它甚至沒有連接顯示器。 – 2012-03-01 01:32:33

回答

2

如果你的卡是某些Intel/NVIDIA的組合,你有兩個選擇:

- 首先設置了NVIDIA卡者優先裝置(在NVIDIA控制面板,管理3D設置,全局/程序設置,更改優先圖形處理器

使用代碼的另一種方法是枚舉具有DXGI的適配器,並嘗試獲取具有受限功能級別的設備(如果不可用,CreateDevice將失敗,並且大多數Intel卡爲10.1)

http://msdn.microsoft.com/en-us/library/windows/desktop/bb174538(v=vs.85).aspx以枚舉適配器。

然後嘗試僅爲每個適配器創建具有D3D_FEATURE_LEVEL_11_0的設備,僅創建支持它的設備。

0

我有類似的問題。我還沒有嘗試升級我的顯卡驅動程序,但是當我將電腦重新插入互聯網時,我將會嘗試升級。

這裏是我發現我如何「解決」(又名陪審團操縱)我的問題:

症狀:

  1. 類似於上面的海報。
  2. 我只有1個NVDIA顯卡,聲稱支持DirectX 11
  3. 當我在DirectX Caps Viewer中查看它時,它只支持DirectX 9.3及更低版本。

解決方案:

  1. 迭代反向通過D3D_FEATURE_LEVEL,主叫D3D11CreateDeviceAndSwapChain()各一次。
  2. 一旦D3D11CreateDeviceAndSwapChain()工作,您就知道您已經找到了您所選圖形卡支持的最大功能級別。

可能有更漂亮的方法來做到這一點,但這就是我的「問題」。顯然,如果我的卡支持完整的DX11系統會更好,但對於用戶遇到類似問題的情況,這不是一個壞的保障措施。至少我可以通過編程來識別問題。