【问题标题】:How to Choose A Specific Graphics Device in SharpDX/DirectX 11?如何在 SharpDX/DirectX 11 中选择特定的图形设备?
【发布时间】:2016-07-11 17:14:52
【问题描述】:

我的系统安装了两个显卡:一个 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);

谢谢!

【问题讨论】:

  • 我已确认该设备正在使用功能集 9.3(通过 SharpDX.Direct3D11.Device.GetSupportedFeatureLevel()),因此默认设备必须是 FX 1500。但是仍然不知道如何更正。
  • 是的,但是您可以通过 DXGI 而不是 DirectX 来执行此操作,请看这里:msdn.microsoft.com/en-us/library/windows/desktop/… under "Enumerate Adapters"

标签: c# directx directx-11 sharpdx


【解决方案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 是常见的做法。

【讨论】:

    猜你喜欢
    • 2017-10-25
    • 1970-01-01
    • 2021-10-29
    • 2011-12-08
    • 2021-07-17
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    相关资源
    最近更新 更多