-1

我正在使用他们 GitHub 页面上的 Microsoft 示例,即使我的代码基于他们的代码,我也没有达到相同的结果。这两个项目都有这些 ComPtrs,但在我的项目中它们都是空的(0x0000000000000000),而在示例中它们工作得很好。

ComPtr<IDXGISwapChain3> m_swapChain;
ComPtr<ID3D12Device> m_device;
ComPtr<ID3D12Resource> m_renderTargets[FrameCount];
ComPtr<ID3D12CommandAllocator> m_commandAllocator;
ComPtr<ID3D12CommandQueue> m_commandQueue;
ComPtr<ID3D12DescriptorHeap> m_rtvHeap;
ComPtr<ID3D12PipelineState> m_pipelineState;
ComPtr<ID3D12GraphicsCommandList> m_commandList;

具体来说,这一行会导致调试器中断。

ThrowIfFailed(m_device->CreateCommandQueue(&queueDesc, IID_PPV_ARGS(&m_commandQueue)));

编辑:我的代码错误地创建了导致错误的 m_device。

4

1 回答 1

0

我的猜测是您从CreateCommandQueue. 您应该将调试器设置为中断异常(请参阅MSDN)。或者,您可以将其重写为:

HRESULT hr = m_device->CreateCommandQueue(&queueDesc, IID_PPV_ARGS(&m_commandQueue));
ThrowIfFailed(hr);

并设置一个调试断点就HRESULT hr = ...行了。

正如有人指出的那样,请确保在此之前检查了所有可能的故障情况。有关创建 Direct3D 12 设备的强大代码,请参阅DeviceResourcesVS Direct3D 12 游戏模板

于 2016-05-04T02:30:37.073 回答