“无法初始化 Direct3d”
Posted
技术标签:
【中文标题】“无法初始化 Direct3d”【英文标题】:"Could not initialize Direct3d" 【发布时间】:2014-05-02 01:04:14 【问题描述】:我正在尝试从这个 Directx-11 教程网站运行 exe:tutorial5(页面末尾的 exe),但我收到错误 。
我在下载解决方案并在 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 应用程序?
谢谢!
【问题讨论】:
【参考方案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的输出窗口的输出?以上是关于“无法初始化 Direct3d”的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin类的初始化 ④ ( lateinit 延迟初始化 | ::属性名称.isInitialized 检查属性是否初始化 | lazy 惰性初始化 )
Kotlin类的初始化 ④ ( lateinit 延迟初始化 | ::属性名称.isInitialized 检查属性是否初始化 | lazy 惰性初始化 )