c++ - D3D 特征级别问题

标签 c++ winapi direct3d

有人可以向我解释一下,当有人尝试使用比用户 GPU 支持的更高的 d3d_feautre_level 时会发生什么吗?

这是我不明白的,如果有人能帮我解决这个问题,我将不胜感激

最佳答案

当您创建 Direct3D 设备时,您提供了您的应用程序支持的 Direct3D 硬件功能级别的列表。如果硬件不支持任何这些功能级别,则设备创建失败。

对于 Direct3D 11,您提供 D3D11CreateDevice 支持的功能级别作为第 5 个和第 6 个参数:

HRESULT D3D11CreateDevice(...
    const D3D_FEATURE_LEVEL *pFeatureLevels,
    UINT FeatureLevels,
    ...);

如果你传递nullptr/0,它默认为:

D3D_FEATURE_LEVEL lvl[] = {
    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 };

对于 Direct3D 12,D3D12CreateDevice 将您支持的最低 Direct3D 功能级别作为第二个参数:

HRESULT WINAPI D3D12CreateDevice(...
    D3D_FEATURE_LEVEL MinimumFeatureLevel,
    ...);

大多数应用程序使用 D3D_FEATURE_LEVEL_11_0 作为最低要求。

Direct3D 12 requires both Windows 10 and WDDM 2.0 drivers that support it. There are no device drivers for any video card lower than Feature Level 11.0 at this time.

参见 Direct3D Feature Levels
Anatomy of Direct3D 11 Create Device
Anatomy of Direct3D 12 Create Device

关于c++ - D3D 特征级别问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40243136/

相关文章:

c++ - 如何判断 stderr 是否已在 Windows 中重定向?

c++ - 单词下的波浪线 (Win32)

c++ - 在 Directx 中围绕特定半径的固定点旋转点?

c++ - 如果其中一种变体类型,如何启用模板功能?

c++ - 使用指向函数的指针和以默认值作为参数的 vector 的函数会导致编译错误

c++ - SFINAE 启用/禁用功能和模板别名

c - 在 C 和 C# 应用程序之间进行 IPC 的最快方法是什么?

c++ - 如何阻止 Direct3D 在多头设置上发布时闪烁?

c++ - D3D->CreateDevice() 在注入(inject)的 DLL 中失败

c++ - 运行时动态加载库时报错 "unresolved external symbol"