我刚刚开始用这本书学习直接3D使用 DirectX11 进行 3D 游戏编程.
我按照第一个教程进行操作,并收到一个消息框,显示“D3D11CreateDevice Failed”。
我检查了这个函数的返回值,得到了垃圾值-2005270483
。
的十六进制值0x887a002d
,人们说它是DXGI_ERROR_SDK_COMPONENT_MISSING
error.
但是,我找不到任何有关它的信息。而且,它也没有任何可能的价值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
...
我目前正在使用带有 DirectX 版本 11 的 Windows 8.1。
我的显卡是 NVIDIA GeForce GTX 650。
我使用的编译器是VS2010 Express。
有谁知道问题和解决方案是什么?