Pet*_*ter 2 c++ directx-11 windows-8.1
我刚开始用DirectX11的3D游戏编程学习直接3D .
我按照第一个教程得到了一个MessageBox,说"D3D11CreateDevice失败".
我检查了这个函数的返回值并获得了垃圾值-2005270483.十六进制值0x887a002d,人们说这是DXGI_ERROR_SDK_COMPONENT_MISSING错误的.
但是,我找不到任何有关它的信息.此外,它没有D3D11CreateDevice()MSDN通知的可能值.
以下是创建D3D设备的书的代码:
bool D3DApp::InitDirect3D()
{
// Create the device and device context.
UINT createDeviceFlags = 0;
#if defined(DEBUG) || defined(_DEBUG)
createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG;
#endif
D3D_FEATURE_LEVEL featureLevel;
HRESULT hr = D3D11CreateDevice(
0, // default adapter
md3dDriverType,
0, // no software device
createDeviceFlags, // createDeviceFlags,
0, 0, // default feature level array
D3D11_SDK_VERSION,
&md3dDevice,
&featureLevel,
&md3dImmediateContext);
if( FAILED(hr) )
{
// I added this part to check out the return value
TCHAR str[100];
int code = -1;
switch(hr) {
case D3D11_ERROR_FILE_NOT_FOUND: code=0;
break;
case D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS: code=1;
break;
case D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS: code=2;
break;
case D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD: code=3;
break;
case DXGI_ERROR_INVALID_CALL: code=4;
break;
case DXGI_ERROR_WAS_STILL_DRAWING: code=5;
break;
case E_FAIL: code=6;
break;
case E_INVALIDARG: code=7;
break;
case E_OUTOFMEMORY: code=8;
break;
case E_NOTIMPL: code=9;
break;
case S_FALSE: code=10;
break;
case S_OK: code=11;
break;
} // switch
_stprintf(str, L"D3D11CreateDevice Failed. Code:%ld %d", hr, code);
MessageBox(0, str, 0, 0);
return false;
} // if
...
Run Code Online (Sandbox Code Playgroud)
我目前正在使用DirectX版本11的Windows 8.1.我的显卡是NVIDIA GeForce GTX 650.我使用的编译器是VS2010 Express.
有谁知道问题和解决方案是什么?
问题是您没有为您的操作系统安装正确的DirectX Debug Runtime.在传统的DirectX SDK(2010年6月)有正确的DirectX调试运行时为Windows Vista SP2和Windows 7又名的DirectX 11.0,但不是一个正确的Windows 8.0,Windows 8.1中,或Windows 7 KB SP1 2670838又名的DirectX 11.1或DirectX 11.2 .
对于Windows 8.1,安装正确的DirectX Debug Runtime的唯一方法是安装Windows 8.1 SDK.如果您已安装Visual Studio 2013,则会自动完成此操作,或者您可以直接在系统上安装SDK.您还可以通过安装Visual Studio 2013远程调试工具包来获取Windows 8.1 SDK调试运行时.有关将调试运行时与SDK匹配的完整表,请参阅Direct3D SDK调试层技巧.
请注意,安装Windows 8.1 SDK独立并继续使用VS 2010的旧版DirectX SDK(2010年6月)D3D11_CREATE_DEVICE_DEBUG再次在Windows 8.1上运行就足够了,但我建议(a)升级到VS 2012或VS 2013 - 或 - (b)使用'道具'解决方案将Windows 8.1 SDK与VS 2010集成,以获得最新版本的标题.在DirectX的工具包做这行VS 2010的支持.
如果您需要继续使用D3DX11等旧版DirectX SDK以及VS 2010项目,那么您可以将Windows 8.1 SDK与DirectX SDK结合使用,但请确保在Windows 8.1 之后列出DirectX SDK include和lib路径SDK包含和lib路径(请参阅MSDN).
总结一下:理想的解决方案是在Windows 8.1上使用Visual Studio 2013而不使用传统的DirectX SDK.在Win32的台式机的Direct3D教程或Windows应用商店的应用程序的Direct3D教程关掉了传统的DirectX SDK在所有就好了.许多DirectX SDK示例现在可在MSDN代码库中使用,该代码库使用Windows 8.x SDK构建,并且不使用旧版DirectX SDK.
最小的解决您的眼前的问题是刚刚安装的Windows 8.1 SDK或在Visual Studio 2013远程调试工具(86或64位),以获得安装操作系统的SDKDebugLayers的正确版本,但请记住,弗兰克·卢纳的书现在相当过时了.有关其他说明,请参阅书籍建议.
| 归档时间: |
|
| 查看次数: |
2831 次 |
| 最近记录: |