Проект D3D12: разыменование nullptr
Я работаю с образцами Microsoft на их странице GitHub, и хотя мой код основан на их коде, я не достигаю того же результата. Оба проекта имеют эти 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, что вызвало ошибку.
1 ответ
Я предполагаю, что вы получаете неудачный HRESULT от CreateCommandQueue
, Вы должны настроить отладчик на прерывание исключений (см. MSDN). Кроме того, вы можете переписать его:
HRESULT hr = m_device->CreateCommandQueue(&queueDesc, IID_PPV_ARGS(&m_commandQueue));
ThrowIfFailed(hr);
И установите точку отладки на HRESULT hr = ...
линия.
Как кто-то заметил, убедитесь, что вы проверили все возможные условия отказа до этого момента. Для некоторого надежного кода для создания устройства Direct3D 12 см. DeviceResources или шаблоны VS Direct3D 12 Game.