From 89d732d5701e6557c1d6d028fdee7bc4ba8278a1 Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Mon, 6 Jan 2025 16:52:36 +0100 Subject: [PATCH] Update MetalTextureCache close handling --- openVulkanoCpp/Vulkan/Metal/MetalTextureCache.h | 1 + openVulkanoCpp/Vulkan/Metal/MetalTextureCache.mm | 4 ++-- openVulkanoCpp/Vulkan/Renderer.cpp | 1 + openVulkanoCpp/Vulkan/Renderer.hpp | 2 ++ 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/openVulkanoCpp/Vulkan/Metal/MetalTextureCache.h b/openVulkanoCpp/Vulkan/Metal/MetalTextureCache.h index e1f98cd..14dbc9c 100644 --- a/openVulkanoCpp/Vulkan/Metal/MetalTextureCache.h +++ b/openVulkanoCpp/Vulkan/Metal/MetalTextureCache.h @@ -21,6 +21,7 @@ namespace OpenVulkano::Vulkan Vulkan::ResourceManager* m_resourceManager = nullptr; std::map m_mtlToVkTextureMap; Renderer* m_renderer; + IEventHandler* m_eventHandler = nullptr; public: ~MetalTextureCache() { if (m_resourceManager) Close(); } diff --git a/openVulkanoCpp/Vulkan/Metal/MetalTextureCache.mm b/openVulkanoCpp/Vulkan/Metal/MetalTextureCache.mm index 29a68d8..46b36cc 100644 --- a/openVulkanoCpp/Vulkan/Metal/MetalTextureCache.mm +++ b/openVulkanoCpp/Vulkan/Metal/MetalTextureCache.mm @@ -28,7 +28,7 @@ namespace OpenVulkano::Vulkan Logger::AR->error("Failed to create metal texture cache! Status code: {}", result); } m_resourceManager = &m_renderer->GetResourceManager(); - m_renderer->RegisterCloseable(this); + m_renderer->OnClose += EventHandler(this, &MetalTextureCache::Close); } Scene::Texture* MetalTextureCache::Get(CVPixelBufferRef pixelBuffer, MTLPixelFormat pixelFormat) @@ -57,7 +57,7 @@ namespace OpenVulkano::Vulkan void MetalTextureCache::Close() { m_mtlToVkTextureMap.clear(); - m_renderer->UnregisterCloseable(this); + m_eventHandler->SetInvalid(); m_renderer = nullptr; m_resourceManager = nullptr; //TODO delete the texture cache object? diff --git a/openVulkanoCpp/Vulkan/Renderer.cpp b/openVulkanoCpp/Vulkan/Renderer.cpp index d3b9a5b..4aa56f1 100644 --- a/openVulkanoCpp/Vulkan/Renderer.cpp +++ b/openVulkanoCpp/Vulkan/Renderer.cpp @@ -89,6 +89,7 @@ namespace OpenVulkano::Vulkan { context.device->device.destroySemaphore(sema); } + OnClose(); depthBufferQuery.Close(); uiRenderer.Close(); resourceManager.Close(); diff --git a/openVulkanoCpp/Vulkan/Renderer.hpp b/openVulkanoCpp/Vulkan/Renderer.hpp index 5ab6c3a..fb7ccc3 100644 --- a/openVulkanoCpp/Vulkan/Renderer.hpp +++ b/openVulkanoCpp/Vulkan/Renderer.hpp @@ -87,5 +87,7 @@ namespace OpenVulkano::Vulkan float GetLastQueriedDepthValue() override { return depthBufferQuery.GetQueriedValue(); } void SetQueryDepthValue(const Math::Vector2f& depthCoordinates) override { depthBufferQuery.SetQueryCoordinates(depthCoordinates); } + + Event<> OnClose; }; }