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; }; }