Проект 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.

Другие вопросы по тегам