From 234a9b1732df27624823f236902920bea7391fe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Till=20W=C3=BCbbers?= Date: Tue, 29 Apr 2025 09:52:19 +0200 Subject: [PATCH] correctly destroy stuff --- src/game/Setup.cpp | 2 +- src/game/rendering/Dither.cpp | 35 ++++++++++++++++++-------------- src/game/rendering/Dither.h | 1 + src/game/rendering/Rendering.cpp | 22 ++++++++++++++++++-- 4 files changed, 42 insertions(+), 18 deletions(-) diff --git a/src/game/Setup.cpp b/src/game/Setup.cpp index ebc9d91..88eff10 100644 --- a/src/game/Setup.cpp +++ b/src/game/Setup.cpp @@ -58,7 +58,7 @@ namespace Game SetInstance(instance); ResetScratch(); Puzzle::LoadStaticPuzzleData(); - SetupInstance.Rendering.Setup({false}); + SetupInstance.Rendering.Setup({}); instance.GameLevel.Setup(shared.Game); instance.IsInitialized = true; } diff --git a/src/game/rendering/Dither.cpp b/src/game/rendering/Dither.cpp index 83d21d1..3e4f240 100644 --- a/src/game/rendering/Dither.cpp +++ b/src/game/rendering/Dither.cpp @@ -84,21 +84,7 @@ void DitherGen(DitherData& data, int32_t recursion) } // Upload textures - if (isValid(data.PreviewTex)) - { - bgfx::destroy(data.PreviewTex); - data.PreviewTex = BGFX_INVALID_HANDLE; - } - if (isValid(data.FinalTex)) - { - bgfx::destroy(data.FinalTex); - data.FinalTex = BGFX_INVALID_HANDLE; - } - if (isValid(data.RampTex)) - { - bgfx::destroy(data.RampTex); - data.RampTex = BGFX_INVALID_HANDLE; - } + CleanupDitherData(data); const bgfx::Memory* memPreview = bgfx::makeRef(data.DitherTex, texPixelCount * sizeof(Vec4)); const bgfx::Memory* memFinal = bgfx::makeRef(data.DitherTex, texPixelCount * sizeof(Vec4)); const bgfx::Memory* memRamp = bgfx::makeRef(data.BrightnessRamp, sizeof(data.BrightnessRamp)); @@ -123,3 +109,22 @@ void DitherGen(DitherData& data, int32_t recursion) data.RampSampler = bgfx::createUniform("s_rampSampler", bgfx::UniformType::Sampler); } } + +void CleanupDitherData(DitherData& data) +{ + if (isValid(data.PreviewTex)) + { + bgfx::destroy(data.PreviewTex); + data.PreviewTex = BGFX_INVALID_HANDLE; + } + if (isValid(data.FinalTex)) + { + bgfx::destroy(data.FinalTex); + data.FinalTex = BGFX_INVALID_HANDLE; + } + if (isValid(data.RampTex)) + { + bgfx::destroy(data.RampTex); + data.RampTex = BGFX_INVALID_HANDLE; + } +} diff --git a/src/game/rendering/Dither.h b/src/game/rendering/Dither.h index 96bcdc3..e6d79dc 100644 --- a/src/game/rendering/Dither.h +++ b/src/game/rendering/Dither.h @@ -24,3 +24,4 @@ struct DitherData }; void DitherGen(DitherData& data, int32_t recursion); +void CleanupDitherData(DitherData& data); diff --git a/src/game/rendering/Rendering.cpp b/src/game/rendering/Rendering.cpp index 8ae02b9..15a9022 100644 --- a/src/game/rendering/Rendering.cpp +++ b/src/game/rendering/Rendering.cpp @@ -6,6 +6,7 @@ #include "../Tools.h" #include "Rendering.h" +#include "Dither.h" #include "SDL3/SDL_events.h" // IWYU pragma: keep #include "backends/imgui_impl_sdl3.h" #include "bgfx/defines.h" @@ -326,9 +327,10 @@ namespace Game bgfx::Init init; init.type = bgfx::RendererType::Direct3D12; #ifdef _DEBUG - // init.debug = true; -#else + init.debug = true; // init.debug = false; +#else + init.debug = false; #endif init.platformData.nwh = shared.Window.Handle; init.platformData.ndt = nullptr; @@ -558,6 +560,22 @@ namespace Game ZoneScopedN("Shutdown"); LOG("--- RENDERING_SHUTDOWN ---"); + for (int32_t i = 0; i < BX_COUNTOF(Textures); ++i) + { + if (isValid(Textures[i].RenderHandle)) + { + bgfx::destroy(Textures[i].RenderHandle); + Textures[i].RenderHandle = {bgfx::kInvalidHandle}; + } + } + for (int32_t i = 0; i < ModelCount; ++i) + { + bgfx::destroy(Models[i].VertexBuffer); + bgfx::destroy(Models[i].IndexBuffer); + } + ModelCount = 0; + + CleanupDitherData(DitherTextures); if (SetupData.UseImgui) { ImGui::SaveIniSettingsToDisk("imgui.ini");