【问题标题】:"Could not initialize Direct3d"“无法初始化 Direct3d”
【发布时间】:2014-05-02 01:04:14
【问题描述】:

我正在尝试从这个 Directx-11 教程网站运行 exe:tutorial5(页面末尾的 exe),但我收到错误 “无法初始化 Direct3d”

我在下载解决方案并在 Visual Studio 2013 或 Visual Studio 2010 上运行时遇到同样的错误。

  • 我已经安装了最新的 DirectX(使用“DirectX 最终用户运行时 Web 安装程序”: link)
  • 我还从这里安装了 DirectX 9 SDK:DirectX 9 SDK June 2010
  • dxdiag 显示 Direct3d “已启用”。
  • 我将“Core i5 上的 Intel HD Graphics library”更新为最新的驱动程序。

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

谢谢!

【问题讨论】:

    标签: directx directx-11 directx-9


    【解决方案1】:

    这里发生了错误,你应该检查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;
    }
    

    另一个有用的提示是在创建设备和交换链时打开调试模式。在创建设备时尝试下面的代码启用调试模式(在d3dclass.cpp中,在调用D3D11CreateDeviceAndSwapChain之前添加以下代码,并且不要忘记将此函数的第三个参数设置为flags)

        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 的输出窗口中查看输出。

    【讨论】:

    • 感谢您的快速回复!我会试试这个,看看 VS 说了什么。
    • 您好,我尝试打开 DEBUG,并按照您的建议将第四个参数设置为 flags。结果在两个地方都返回为 false。屏幕宽度=1280,屏幕高度=800。这是我在输出窗口中看到的(最后 2 行): 'Engine.exe': Unloaded 'C:\Windows\SysWOW64\cfgmgr32.dll' 'Engine.exe': Loaded 'C:\Program Files (x86) \Internet 下载管理器\idmmkb.dll', 无法找到或打开 PDB 文件
    • 您应该将标志设置为第三个参数。
    • 当我将其设为第三个参数时,我收到错误消息:“从整数类型转换为指针类型需要 reinterpret_cast、C 样式转换或函数样式转换”。该函数的原型是 HRESULT WINAPI D3D11CreateDeviceAndSwapChain(IDXGIAdapter* pAdapter, D3D_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, (FeatureLevels) CONST D3D_FEATURE_LEVEL* pFeatureLevels, UINT FeatureLevels, UINT SDKVersion, CONST DXGI_SWAP_CHAIN_DESC* pSwapChainDesc, IDXGISwa ppDevice, D3D_FEATURE_LEVEL* pFeatureLevel, ID3D11DeviceContext** ppImmediateContext );
    • 能不能在这个函数上设置断点,一步一步调试,看看Visual Studio的输出窗口的输出?
    猜你喜欢
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    相关资源
    最近更新 更多