From 63ab54216ffbdab363f549b22017c67846e1aeec Mon Sep 17 00:00:00 2001 From: Slendi Date: Wed, 3 Dec 2025 02:37:39 +0200 Subject: [PATCH] Fix cleanup bugs Signed-off-by: Slendi --- src/Application.cpp | 2 -- src/Application.h | 2 -- src/VulkanRenderer.cpp | 18 ++++++++++++------ src/VulkanRenderer.h | 2 ++ 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/Application.cpp b/src/Application.cpp index cc4b9bf..eb5007f 100644 --- a/src/Application.cpp +++ b/src/Application.cpp @@ -38,8 +38,6 @@ Application::~Application() { m_renderer.reset(); - ImGui::DestroyContext(m_imgui_context); - SDL_DestroyWindow(m_window); SDL_Quit(); diff --git a/src/Application.h b/src/Application.h index b25d6e2..3a9bf10 100644 --- a/src/Application.h +++ b/src/Application.h @@ -22,8 +22,6 @@ private: Logger m_logger { "Lunar" }; std::unique_ptr m_renderer; - ImGuiContext *m_imgui_context; - bool m_running { true }; }; diff --git a/src/VulkanRenderer.cpp b/src/VulkanRenderer.cpp index c54a95f..5e75ca2 100644 --- a/src/VulkanRenderer.cpp +++ b/src/VulkanRenderer.cpp @@ -388,9 +388,9 @@ auto VulkanRenderer::imgui_init() -> void pool_info.poolSizeCount = (uint32_t)std::size(pool_sizes); pool_info.pPoolSizes = pool_sizes; - VkDescriptorPool imgui_pool; - VK_CHECK(m_logger, - vkCreateDescriptorPool(m_vkb.dev, &pool_info, nullptr, &imgui_pool)); + VK_CHECK(m_logger, vkCreateDescriptorPool( + m_vkb.dev, &pool_info, nullptr, + &m_vk.imgui_descriptor_pool)); ImGui::CreateContext(); @@ -401,7 +401,7 @@ auto VulkanRenderer::imgui_init() -> void init_info.PhysicalDevice = m_vkb.phys_dev; init_info.Device = m_vkb.dev; init_info.Queue = m_vk.graphics_queue; - init_info.DescriptorPool = imgui_pool; + init_info.DescriptorPool = m_vk.imgui_descriptor_pool; init_info.MinImageCount = 3; init_info.ImageCount = 3; init_info.UseDynamicRendering = true; @@ -418,9 +418,15 @@ auto VulkanRenderer::imgui_init() -> void ImGui_ImplVulkan_Init(&init_info); - m_vk.deletion_queue.emplace([&]() { + m_vk.deletion_queue.emplace([this]() { ImGui_ImplVulkan_Shutdown(); - vkDestroyDescriptorPool(m_vkb.dev, imgui_pool, nullptr); + ImGui_ImplSDL3_Shutdown(); + ImGui::DestroyContext(); + if (m_vk.imgui_descriptor_pool != VK_NULL_HANDLE) { + vkDestroyDescriptorPool( + m_vkb.dev, m_vk.imgui_descriptor_pool, nullptr); + m_vk.imgui_descriptor_pool = VK_NULL_HANDLE; + } }); } diff --git a/src/VulkanRenderer.h b/src/VulkanRenderer.h index 92c69fb..fa99e20 100644 --- a/src/VulkanRenderer.h +++ b/src/VulkanRenderer.h @@ -95,6 +95,8 @@ private: VkPipeline gradient_pipeline {}; VkPipelineLayout gradient_pipeline_layout {}; + VkDescriptorPool imgui_descriptor_pool { VK_NULL_HANDLE }; + DeletionQueue deletion_queue; VkFence imm_fence {};