2016-07-11 38 views
0

我的系統安裝了兩塊顯卡:一塊支持DirectX 9的Quadro FX 1500和一塊支持DirectX 11的Quadro 600.我正在寫一個針對DirectX的C#應用​​程序(使用SharpDX包裝庫) 11,所以我想確保我總是選擇Quadro 600作爲我的設備。 DirectX 11默認會選擇正確的設備/圖形卡,或者如果沒有,我是否可以枚舉系統上的設備並選擇支持DirectX 11的設備?如何在SharpDX/DirectX 11中選擇特定的圖形設備?

現在我的設備初始化代碼如下所示:

//which device do we get? 
SharpDX.Direct3D11.Device defaultDevice = new SharpDX.Direct3D11.Device(DriverType.Hardware, DeviceCreationFlags.Debug); 

謝謝!

+0

我已經確認設備正在使用功能設置9.3(通過'SharpDX.Direct3D11.Device.GetSupportedFeatureLevel()'),所以默認設備必須是FX 1500.但是不知道如何改正。 – artisticdude

+0

是的,但是你可以通過DXGI而不是DirectX來做到這一點:https://msdn.microsoft.com/en-us/library/windows/desktop/bb205075(v=vs.85).aspx下「枚舉適配器」 –

回答

0

爲了創建特定適配器的設備,您需要將它作爲參數在設備構造函數中傳遞。

首先獲得您所需要的設備索引:

SharpDX.DXGI.Factory f = new SharpDX.DXGI.Factory1(); 
SharpDX.DXGI.Adapter a = f.GetAdapter(adapterindex); 
FeatureLevel[] levels = new FeatureLevel[] 
{ 
#if DIRECTX11_1 
    FeatureLevel.Level_11_1, 
#endif 
    FeatureLevel.Level_11_0, 
    FeatureLevel.Level_10_1, 
    FeatureLevel.Level_10_0, 
    FeatureLevel.Level_9_3 
}; 

DeviceCreationFlags flags = DeviceCreationFlags.BgraSupport; 

var dev = new Device(a, flags, levels); 

要找到合適的適配器,您可以循環GetAdapter功能和使用說明找到你需要的人。

請注意,如果您手動指定設備,則不應使用硬件標誌。 BgraSupport是慣例。