如何在SharpDX / DirectX 11中选择特定的图形设备?

时间:2016-07-11 17:14:52

标签: c# directx directx-11 sharpdx

我的系统安装了两块显卡:Quadro FX 1500,支持DirectX 9,Quadro 600支持DirectX 11.我正在编写C#应用程序(使用SharpDX包装程序库) )对DirectX 11,所以我想确保我总是选择Quadro 600作为我的设备。默认情况下DirectX 11会选择正确的设备/显卡吗?如果没有,有没有办法可以枚举系统中的设备并选择支持DirectX 11的设备?

现在我的设备初始化代码如下所示:

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

谢谢!

1 个答案:

答案 0 :(得分:1)

要为特定适配器创建设备,您需要在设备构造函数中将其作为参数传递。

首先获取所需的设备索引:

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函数,并使用Description来查找所需的适配器。

请注意,如果您手动指定设备,则不应使用硬件标志。 BgraSupport是常见的做法。