2014-05-02 135 views
0

我想从此Directx-11教程网站运行一个exe文件:tutorial5(exe在页面末尾),但我得到错误“无法初始化Direct3d”“无法初始化Direct3d”

我得到同样的错误,当我下载的解决方案和Visual Studio的2013或Visual Studio运行2010

  • 我已经安装了最新的DirectX(已安装使用“的DirectX 最终用户运行Web安装程序“: link
  • 我还安装了DirectX 9 SDK从这里:DirectX 9 SDK June 2010
  • 输入dxdiag显示的Direct3D “已启用”。
  • 我将“核心i5上的英特尔高保真图形库”更新为最新的驱动程序。

我错过了什么?我如何在我的机器上运行DirectX-11应用程序?

谢谢!

回答

0

这里发生的错误,你应该检查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的输出窗口中看到输出。

+0

感谢您的快速响应!我会尝试这个,看看VS说什么。 – recursion1212

+0

嗨,我试着打开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

+0

您应该将标志设置为第三个参数。 – zdd