如何查找支持的 Direct3D 功能级别

鲍勃·克劳斯

我想找出我的 C# UWP 程序支持哪些 Direct 3D 功能级别(此处显示)。

注意:我这样做是为了研究我的问题的可能答案,我怎么知道,在代码中,如果 RadialGradientBrush 没有正确显示?

在 C++ 中,对D3D11CreateDevice的调用可能很有用,但似乎没有 C# 等效项。

或者,更好的是ID3D11Device,它有一个GetFeatureLevel()调用。同样,这些是 C++ 项。

鲍勃·克劳斯

我想出了这个:

C++ DLL:

#include "pch.h"
#include <wrl.h>
#include <d3d11_2.h> 
#include "BKGraphicsDLL.h"

using Microsoft::WRL::ComPtr;

extern "C"
{
    __declspec(dllexport) D3D_FEATURE_LEVEL GetGraphicsFeatureLevel()
    {
        HRESULT hr = E_FAIL;
        D3D_FEATURE_LEVEL MaxSupportedFeatureLevel = D3D_FEATURE_LEVEL_9_1;
        D3D_FEATURE_LEVEL FeatureLevels[] = {
            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
        };

        hr = D3D11CreateDevice(
            NULL,
            D3D_DRIVER_TYPE_HARDWARE,
            NULL,
            0,
            FeatureLevels,
            ARRAYSIZE(FeatureLevels),
            D3D11_SDK_VERSION,
            NULL,
            &MaxSupportedFeatureLevel,
            NULL
        );

        return MaxSupportedFeatureLevel;
    }
}

一个枚举和一个 NativeMethods 类来访问我的 MainPage C# 中的 DLL:

    public enum D3DFeatureLevel
    {
        D3D_FEATURE_LEVEL_9_1 = 0x9100,
        D3D_FEATURE_LEVEL_9_2 = 0x9200,
        D3D_FEATURE_LEVEL_9_3 = 0x9300,
        D3D_FEATURE_LEVEL_10_0 = 0xa000,
        D3D_FEATURE_LEVEL_10_1 = 0xa100,
        D3D_FEATURE_LEVEL_11_0 = 0xb000,
        D3D_FEATURE_LEVEL_11_1 = 0xb100,
        D3D_FEATURE_LEVEL_12_0 = 0xc000,
        D3D_FEATURE_LEVEL_12_1 = 0xc100
    };


    // used to get Graphics capabilities
    internal static class NativeMethods
    {
        [DllImport("BKGraphicsDLL.dll", ExactSpelling = true)]
        public static extern D3DFeatureLevel GetGraphicsFeatureLevel();

    }

无论我需要在代码中的何处设置功能级别,都使用以下行:

    D3DFeatureLevel maxFeatureLevel = NativeMethods.GetGraphicsFeatureLevel();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

“不支持Direct3D功能级别11。” 在Win7 + VS2010的环境下

D3D功能级别问题

Tensorflow 2.0:如何在功能级别实现融合网络?

使用CMake查找Direct3D 12

Direct3D 9.0返回到固定功能管道

Oracle Virtual Box如何启用Direct3D

如何在无服务器框架中分配功能级别IamRoleStatements?

如何在Azure Function中读取功能级别设置/键?

如何在Xamarin移动应用中使用功能级别授权安全地调用Azure功能?

Windows 10移动版(电话)是否支持Direct3D 12?

DirectX API级别与功能级别

C ++和Direct3D 9-如何绘制带格式的文本?(例如printf等)

如何在Direct3D 11中从CPU访问帧缓冲区?

如何在多头安装程序发布时阻止Direct3D闪烁?

如何在Direct3D 11中实现“渲染到纹理”管道?

如何在Windows 8上禁用DirectDraw和Direct3D加速?

如何在Direct3D 11中启用深度测试?

当前着色器后端不支持在此GPU上支持wine Direct3D 10

如何将Direct3D 11覆盖层与WPF Viewport3D同步?

使用“最小”的功能级别集

如何在Windows 8中为32位应用程序启用Direct3D加速?

引用常量或包级别变量而不是功能级别变量

“尽管它支持 DirectX 11,但功能级别仅为 10_0,这对于许多 DirectX 11 和 DirectX 12 游戏来说可能会出现问题”

colorssh:7:达到最大嵌套功能级别;增加功能?

tsc:1:达到最大嵌套功能级别;增加功能?

Direct3D 查找 2D 屏幕坐标有效,但在压力时会出现镜像故障

指定外部库,但不在功能级别

升级域功能级别有什么好处?

Direct3D 和 DXGI 的区别