我最近刚开始学习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工具,结果如下:
答案 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,};
如果您的设备支持任何这些功能级别(它将按顺序尝试),则表示该功能将成功。可能,它会为您提供featureLevel
为D3D_FEATURE_LEVEL_10_1
(或更低,取决于实际卡)的设备。是时候购买新的视频卡了。