这里发生的错误,你应该检查Initialize函数的结果,看看错误是什么。
// Initialize the Direct3D object.
result = m_D3D->Initialize(screenWidth, screenHeight, VSYNC_ENABLED, hwnd, FULL_SCREEN, SCREEN_DEPTH, SCREEN_NEAR);
if(!result)
{
MessageBox(hwnd, L"Could not initialize Direct3D.", L"Error", MB_OK);
return false;
}
另一个有用的技巧是在创建设备和交换链时打开DEBUG模式。试试下面的代码创建设备时启用调试模式(d3dclass.cpp,呼吁D3D11CreateDeviceAndSwapChain之前添加以下代码,不要忘记设置此功能标志的第三个参数)
UINT flags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;
#if defined(DEBUG) || defined(_DEBUG)
flags |= D3D11_CREATE_DEVICE_DEBUG;
#endif
// Create the swap chain, Direct3D device, and Direct3D device context.
result = D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, flags, 0, &featureLevel, 1,
D3D11_SDK_VERSION, &swapChainDesc, &m_swapChain, &m_device, NULL, &m_deviceContext);
if(FAILED(result))
{
return false;
}
构建和以调试模式运行程序,并在VS的输出窗口中看到输出。
来源
2014-05-02 04:55:44
zdd
感谢您的快速响应!我会尝试这个,看看VS说什么。 – recursion1212
嗨,我试着打开DEBUG,并设置第四个参数为标志,就像你建议的那样。结果在两个地方都返回为false。 ScreenWidth = 1280,screenHeight = 800。这是我在输出窗口中看到的(最后2行): 'Engine.exe':卸载'C:\ Windows \ SysWOW64 \ cfgmgr32.dll' 'Engine.exe':Loaded'C:\ Program Files x86)\ Internet Download Manager \ idmmkb.dll',无法找到或打开PDB文件 – recursion1212
您应该将标志设置为第三个参数。 – zdd