.NET How to detect if DirectX 10 is supported?

前端 未结 3 1877
情书的邮戳
情书的邮戳 2021-01-13 13:35

I would like to find out from .NET code whether DirectX 10 is supported on the machine, preferably without using managed DirectX or XNA assemblies.

Thank you in adva

3条回答
  •  感情败类
    2021-01-13 14:28

    To check DirectX10, we're actually calling the D3DX10CheckVersion function via platform invoke.

    This requires presence of the D3DX10 DLLs in the C:\Windows\System32 or C:\Windows\SysWow64 folders (platform dependent). If these are not present, then you need to install the DirectX10 Runtime on the target PC.

    The actual support DirectX version / DirectX SDK version can be determined from the parameters to the P/Invoke call.

    Here is the P/Invoke call:

    // DX10 Supported Function
    // See D3DX10CheckVersion http://msdn.microsoft.com/en-us/library/windows/desktop/bb172639(v=vs.85).aspx
    [DllImport("d3dx10_43.dll", EntryPoint = "D3DX10CheckVersion", CallingConvention = CallingConvention.StdCall, SetLastError = false)]
    private static extern HResult D3DX10CheckVersion(
            uint D3DSdkVersion,
            uint D3DX10SdkVersion);
    
    public enum HResult : int
    {
        S_OK = 0x0000,
        S_FALSE = 0x0001,
        E_NOTIMPL = 0x0002,
        E_INVALIDARG = 0x0003,
        E_FAIL = 0x0004,
    };
    
    bool SupportsDirectX10()
    {
        // Values taken from d3d10.h to check DirectX version
        const uint D3D10_SDK_VERSION = 29;
        const uint D3DX10_SDK_VERSION = 43;
    
        // Checks DirectX 10 GPU compatibility with the DirectX10 runtime
        // Assumes D3DX10 DLLs present in C:\Windows\System32 or
        // C:\Windows\SysWow64 folders (platform dependent)
        HResult hResult = D3DX10CheckVersion(D3D10_SDK_VERSION, D3DX10_SDK_VERSION);
        return hResult == HResult.S_OK; 
    }
    

提交回复
热议问题