我正在 Visual Studio Community 2019 中开发我的第一个 DirectX 12 C++ 应用程序,但无法从 Visual Studio 输出窗口中的调试日志输出中获取有用信息。
我的问题是我试图通过调用CreateSwapChain创建交换链,但对此函数的调用失败并出现 HRESULT,并产生以下错误消息:
应用程序进行了无效的调用。调用的参数或某些对象的状态不正确。启用 D3D 调试层以便通过调试消息查看详细信息。
除此之外,我还可以在“输出”窗口中看到 Visual Studio 的标准调试输出。它显示加载了哪些 .dll 文件以及引发了异常。我不相信任何输出来自 DirectX。
为了启用调试层,我尝试以下代码,从WinMain函数的第一行开始:
#if defined(DEBUG) || defined(_DEBUG)
Microsoft::WRL::ComPtr<ID3D12Debug> debugController;
ThrowIfFailed(D3D12GetDebugInterface(IID_PPV_ARGS(&debugController)));
debugController->EnableDebugLayer();
#endif
Run Code Online (Sandbox Code Playgroud)
此外,我运行 dxcpl.exe 打开 DirectX 控制面板,将可执行文件添加到范围列表中,然后为 Direct3D/DXGI 调试层选项选择“应用程序控制”单选按钮。
我通过选择“调试”->“开始调试”再次执行代码,在 Visual Studio 输出窗口中,我现在可以看到从“D3D12”报告的信息消息,例如:
...
D3D12 INFO: Create ID3D12CommandAllocator: Addr=0x0C3CBD78, ExtRef=1, IntRef=0 [ STATE_CREATION INFO #558: CREATE_COMMANDALLOCATOR]
D3D12 INFO: Create ID3D12GraphicsCommandList: Addr=0x0C42EA78, ExtRef=1, IntRef=0 [ STATE_CREATION INFO #560: CREATE_COMMANDLIST12]
D3D12 INFO: Create ID3D12GraphicsCommandList: Addr=0x0C479C68, …Run Code Online (Sandbox Code Playgroud)