From 7d0b8be65ca649e8d8a9e15f1673a1f3c004781f Mon Sep 17 00:00:00 2001 From: Patedam Date: Sun, 2 Feb 2025 15:17:09 -0500 Subject: [PATCH] Fixed crash on stop. Was destroying the device and not the renderer. --- .../src/Graphics/D3D12/DX12GraphicsDevice.cpp | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/Juliet/src/Graphics/D3D12/DX12GraphicsDevice.cpp b/Juliet/src/Graphics/D3D12/DX12GraphicsDevice.cpp index 14a4539..a8a0d26 100644 --- a/Juliet/src/Graphics/D3D12/DX12GraphicsDevice.cpp +++ b/Juliet/src/Graphics/D3D12/DX12GraphicsDevice.cpp @@ -198,6 +198,28 @@ namespace Juliet void DestroyRenderer_Internal(NonNullPtr renderer) { + if (renderer->IndirectDrawCommandSignature) + { + ID3D12CommandSignature_Release(renderer->IndirectDrawCommandSignature); + renderer->IndirectDrawCommandSignature = nullptr; + } + if (renderer->IndirectIndexedDrawCommandSignature) + { + ID3D12CommandSignature_Release(renderer->IndirectIndexedDrawCommandSignature); + renderer->IndirectIndexedDrawCommandSignature = nullptr; + } + if (renderer->IndirectDispatchCommandSignature) + { + ID3D12CommandSignature_Release(renderer->IndirectDispatchCommandSignature); + renderer->IndirectDispatchCommandSignature = nullptr; + } + + if (renderer->CommandQueue) + { + ID3D12CommandQueue_Release(renderer->CommandQueue); + renderer->CommandQueue = nullptr; + } + if (renderer->D3D12Device) { ID3D12Device_Release(renderer->D3D12Device); @@ -231,7 +253,7 @@ namespace Juliet void DestroyGraphicsDevice(NonNullPtr device) { - auto* renderer = reinterpret_cast(device.Get()); + auto* renderer = reinterpret_cast(device->Renderer); DestroyRenderer_Internal(renderer); Free(device.Get()); }