小编Sky*_*ine的帖子

从 DirectX12 调试层获取有用信息

我正在 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)

visual-c++ directx-12

2
推荐指数
1
解决办法
3214
查看次数

标签 统计

directx-12 ×1

visual-c++ ×1