【发布时间】:2021-11-11 06:23:30
【问题描述】:
我正在运行 VS 项目(使用 VS 2015 开发)以及 VS 2019 中的 DirectX 12 3D 游戏编程简介。 但它抛出了一个 HRESULT 值为 -2147024809 的异常,如下所示:
mCommandList->Close() failed in
E:\programs\cpp_codes\d3d12\Common\d3dApp.cpp;line 213; HRESULT:-2147024809
-2147024809 表示参数不正确。但是可以看出,没有任何参数传递给ID3D12GraphicsCommandList::Close() 方法,这让我很困惑。
这行代码几个月前没有抛出异常。
另一个 COM 方法在d3dApp.cpp 中抛出了类似的异常,即
ThrowIfFailed(md3dDevice->CreateCommittedResource(
&CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_DEFAULT),
D3D12_HEAP_FLAG_NONE,
&depthStencilDesc,
D3D12_RESOURCE_STATE_COMMON,
&optClear,
IID_PPV_ARGS(mDepthStencilBuffer.GetAddressOf()))); failed in
E:\programs\cpp_codes\d3d12\Common\d3dApp.cpp;line 203; HRESULT:-2147024809
但只要我将第五个参数从&optClear 更改为nullptr,这个异常就不会出现。此外,几个月前对CreateCommittedResource 的调用也没有引发异常。
【问题讨论】:
-
@Simon Mourier 我认为它已启用,因为有这样一段代码:
ComPtr<ID3D12Debug> debugController;debugController->EnableDebugLayer(); -
如果启用,您应该会看到来自 OutputDebugTrace 调用的额外消息(如调试时在 Visual Studio 输出窗口中)
-
它显示了一些信息,但我不太明白。我稍后会调查它。谢谢你:)
-
你得到的 HRESULT 是
E_INVALIDARG,所以调试层是最好的选择。您应该阅读Microsoft Docs 以了解如何启用它。你也可以看看DirectX Tool Kit for DX12。
标签: visual-studio directx directx-12