找出DirectX版本

时间:2014-03-06 11:58:55

标签: .net windows-7 directx sharpdx

如何检测Windows 7计算机上的directx版本是11还是11.1?

最好使用.NET语言,也可以通过PInvoke或SharpDX?

1 个答案:

答案 0 :(得分:4)

尝试创建具有特定功能级别的设备(以及其他参数)。

  • 在本机代码中(使用D3D11CreateDevice*函数之一)。如果功能不成功 - 不支持功能级别。为了方便起见,我们通常会传递一系列功能级别,然后,如果设备不是nullptr,我们可以检查哪一个功能最高:

    const D3D_FEATURE_LEVEL arrFeatLevels[] = 
    {
        D3D_FEATURE_LEVEL_11_1, 
        D3D_FEATURE_LEVEL_11_0,
        D3D_FEATURE_LEVEL_10_1, 
        D3D_FEATURE_LEVEL_10_0,
        D3D_FEATURE_LEVEL_9_3, 
        D3D_FEATURE_LEVEL_9_2,
        D3D_FEATURE_LEVEL_9_1, 
    };
    
    const unsigned int nFeatLevels = _countof(arrFeatLevels);
    
    D3D11CreateDeviceAndSwapChain(..., arrFeatLevels, nFeatLevels, ..., 
                                       &m_Device, &featureLevel, &m_Context);
    if (m_Device && m_Context)
    {
        featureLevel // you can access to highest supported feature level here
    
  • 在SharpDX 中,您需要使用构造函数,它接受特定的功能级别:

    Device(DriverType, DeviceCreationFlags, FeatureLevel[])
    

    如果设备创建成功,请检查Device.FeatureLevel属性。

快乐的编码!

修改

我想我误解了你的问题。您询问是否检测到操作系统支持的版本,而不是OS +显卡+驱动程序。支持最大版本的操作系统已预先安装,因此您只需要知道您使用的操作系统:

OS version                      Version of DX runtime

Windows Vista                   DirectX 10
Windows Vista SP1/SP2           DirectX 10.1
Windows Vista SP2               DirectX 11.0
Windows 7                       DirectX 11.0
Windows 7 SP1                   DirectX 11.0
Windows 7 SP1 with KB2670838    DirectX 11.1
Windows 8 / Windows RT          DirectX 11.1
Windows 8.1 / Windows RT        DirectX 11.2
来源:

您还可以查询d3d11.dll的版本,并与维基页面上的版本进行比较。 参见: