我正在使用他们的GitHub页面中的Microsoft示例,即使我的代码基于他们的代码我也没有达到相同的结果。 两个项目都有这些ComPtrs但我们都是null(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。
答案 0 :(得分:0)
我的猜测是你从CreateCommandQueue
回来了一个失败的HRESULT。您应该将调试器设置为中断异常(请参阅MSDN)。或者,您可以将其重写为:
HRESULT hr = m_device->CreateCommandQueue(&queueDesc, IID_PPV_ARGS(&m_commandQueue));
ThrowIfFailed(hr);
并在HRESULT hr = ...
行设置调试断点。
如有人指出,请确保在此之前检查了所有可能的故障情况。有关创建Direct3D 12设备的强大代码,请参阅DeviceResources或VS Direct3D 12 Game templates