在具备11台功能的机器上,最高D3D_FEATURE_LEVEL为9.3

时间:2014-11-08 17:58:11

标签: c++ directx-11 direct3d11

我目前正在阅读Frank Luna的DirectX 11 3D游戏编程简介,刚刚到达我加载第一个着色器的部分。

在链接到正确的库以便能够编译着色器之后,我被迫切换到VS 2010工具集,因此我的应用程序没有尝试使用Windows 8.1库(包括DirectX,因此它与我的June SDK目录冲突)。

我现在已经完成了所有编译工作,但是我的D3D11CreateDevice函数调用现在将D3D_FEATURE_LEVEL_9_3存储为我支持的最高功能级别。之前没有这样做过。我在我的dxdiag.exe上确认我的系统可以支持11.我也在NVidia控制面板中确认了这一点,它将DirectX Runtime版本声明为11_0。

从我一直在阅读的其他人遇到过类似问题的原因是他们的主要视频适配器是默认适配器。但是,我只有一个适配器,所以我的GTX 670必须是我的主适配器,对吗?

我的环境: Visual Studio 2013(使用VS 2010工具集) 视频卡:GEFORCE GTX 670M(支持dx11) 华硕G75V笔记本 Windows 7 64位

无论如何,我打电话来检查功能级别。

// Create Direct3D Device
HRESULT hr = D3D11CreateDevice(
    0,
    D3D_DRIVER_TYPE_HARDWARE,
    0,
    createDeviceFlags,
    0, 0,
    D3D11_SDK_VERSION,
    &m_d3dDevice,
    &featureLevel,
    &m_d3dImmediateContext);

if (FAILED(hr)) {
    throw Error("Direct3D Device Creation Failed!");
}

// Check feature level
if (featureLevel != D3D_FEATURE_LEVEL_11_0) {
    throw Error("Direct3D Feature Level 11 not supported!");
}

Debugging the feature level

任何关于到底发生了什么的输入将不胜感激。 Direct3D对我来说是一个相当新的世界,所以请放轻松。

1 个答案:

答案 0 :(得分:2)

我在使用ATI Radeon 6xxx显卡的Windows 8.1上遇到了同样的问题。 Caps Viewer报告功能级别11_2,而D3D11CreateDevice返回最大级别为9_3的设备。

最后我发现我在2010年6月安装了DirectX SDK。卸载它解决了这个问题。