【问题标题】:"Direct3D Feature Level 11 unsupported." under the environment of Win7 + VS2010“不支持 Direct3D 功能级别 11。” Win7+VS2010环境下
【发布时间】:2017-07-31 10:39:36
【问题描述】:

我最近才开始学习 D3D。我已经按照我正在关注的在线教程设置了我的环境,但是当我运行Luna关于DX11的书的Chapter 6 BOX源时出现了问题。

我在运行时收到以下dialog box(“Direct3D Feature Level 11 unsupported.”)

问题的代码段:

D3D_FEATURE_LEVEL featureLevel;
HRESULT hr = D3D11CreateDevice(
        0,                 // default adapter
        md3dDriverType,
        0,                 // no software device
        createDeviceFlags, 
        0, 0,              // default feature level array
        D3D11_SDK_VERSION,
        &md3dDevice,
        &featureLevel,
        &md3dImmediateContext);

if( FAILED(hr) )
{
    MessageBox(0, L"D3D11CreateDevice Failed.", 0, 0);
    return false;
}

if( featureLevel != D3D_FEATURE_LEVEL_11_0 )
{
    MessageBox(0, L"Direct3D Feature Level 11 unsupported.", 0, 0);
    return false;
}

我在stackoverflow上发现了一个类似的问题(Two problems while initializing Directx 11.0 - 1.FeatureLevel, 2. 4xMSAA quality), 但答案并不能解决我的问题。我已经更新了我的图形驱动程序。

我用过DxDiag工具,结果如下:

dxdiag

【问题讨论】:

    标签: visual-studio-2010 windows-7 directx directx-11


    【解决方案1】:

    Windows 7 包含 DirectX 11 API,但这并不意味着您拥有支持 DirectX 11 的视频硬件。 DirectX 11(API)支持排列成Direct3D hardware feature levels 的一系列视频硬件。仅仅因为您当前的驱动程序/卡不支持 11.0,它可能支持 10.1 或 10.0,它们有许多(但不是全部)相同的 features

    在 Windows 8 或更高版本上,您可以请求超过 11.0 的其他功能级别。默认情况下,如果您将nullptr 传递给默认功能级别数组,它将仅返回 9.1、9.2、9.3、10.0、10.1 或 11.0。

    请注意,在 Windows 7 Service Pack 1 上,可以安装 DirectX 11.1 Runtime,但它不支持较新的驱动程序模型。因此,您不能使用 Direct3D 硬件功能级别 11.1——这些卡都支持 11.0,因此您可以回退到该版本。见DirectX 11.1 and Windows 7。 DirectX 11.2 及更高版本不适用于 Windows 7。

    为了简单起见,Frank Luna 的消息来源假设您拥有支持 11.0 的视频卡,但您仍然可以使用旧卡做很多事情。有关如何创建具有一系列功能级别的设备的详细信息,请参阅Anatomy of Direct3D 11 Create Device

    或者,您可以获得更新的视频卡。

    由于您是 DirectX 开发的新手,因此请务必阅读 Book Recommendations 以了解 Luna 书中某些方面的注释,这些方面在该书的印刷日期后不久就已过时。您可能还想查看DirectX Tool Kit tutorials

    最后,考虑迁移到更新版本的 Visual Studio。在这一点上,大多数现代DirectX supporting libraries 不会使用 VS 2010 构建,因为它只实现了一些 C++11 草案语言功能。你应该看看使用VS Community edition,只要你满足许可要求,它是免费的。

    【讨论】:

    • 我觉得我应该换台电脑了。但是无论如何谢谢你回答我的问题
    【解决方案2】:

    仅仅因为您的图形驱动程序是最新的,并不意味着它们支持D3D_FEATURE_LEVEL_11_0。目前尚不清楚您实际上从 DxDiag 获得的视频卡,但 HP 3005 MT 的默认规格显示最好的可用卡是 Nvidia 315,它仅支持 DirectX 10.1。

    D3D11CreateDeivce 的文档中所述:

    如果 pFeatureLevels 设置为 NULL,则此函数使用以下 特征级别数组:

    { 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, };

    意味着如果您的设备支持这些功能级别中的任何一个,则该功能将成功(它将按顺序尝试它们)。很可能,它会为您提供featureLevelD3D_FEATURE_LEVEL_10_1(或更低,取决于实际卡)的设备。是时候购买新显卡了。

    【讨论】:

    • 我想我应该换台电脑了。但无论如何谢谢你回答我的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    相关资源
    最近更新 更多