我的系统安装了两块显卡: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);
谢谢!
答案 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是常见的做法。