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