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

时间:2017-03-10 07:11:56

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

我最近刚开始学习D3D。我按照我所遵循的在线教程设置了我的环境,但是当我运行Luna关于DX11的书的第6章BOX源时出现了问题。

运行时收到以下dialog box(“Direct3D功能级别11不受支持。”)

问题的代码段:

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

2 个答案:

答案 0 :(得分: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。

弗兰克·卢纳的消息来源假设您拥有一张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,只要您符合许可要求,就可以免费使用。{/ p>

答案 1 :(得分:0)

仅仅因为您的图形驱动程序是最新的,并不意味着它们支持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(或更低,取决于实际卡)的设备。是时候购买新的视频卡了。