Update MetalTextureCache close handling

This commit is contained in:
Georg Hagen
2025-01-06 16:52:36 +01:00
parent ac0a0e84b4
commit 89d732d570
4 changed files with 6 additions and 2 deletions

View File

@@ -21,6 +21,7 @@ namespace OpenVulkano::Vulkan
Vulkan::ResourceManager* m_resourceManager = nullptr; Vulkan::ResourceManager* m_resourceManager = nullptr;
std::map<void*, MetalBackedTexture> m_mtlToVkTextureMap; std::map<void*, MetalBackedTexture> m_mtlToVkTextureMap;
Renderer* m_renderer; Renderer* m_renderer;
IEventHandler* m_eventHandler = nullptr;
public: public:
~MetalTextureCache() { if (m_resourceManager) Close(); } ~MetalTextureCache() { if (m_resourceManager) Close(); }

View File

@@ -28,7 +28,7 @@ namespace OpenVulkano::Vulkan
Logger::AR->error("Failed to create metal texture cache! Status code: {}", result); Logger::AR->error("Failed to create metal texture cache! Status code: {}", result);
} }
m_resourceManager = &m_renderer->GetResourceManager(); m_resourceManager = &m_renderer->GetResourceManager();
m_renderer->RegisterCloseable(this); m_renderer->OnClose += EventHandler(this, &MetalTextureCache::Close);
} }
Scene::Texture* MetalTextureCache::Get(CVPixelBufferRef pixelBuffer, MTLPixelFormat pixelFormat) Scene::Texture* MetalTextureCache::Get(CVPixelBufferRef pixelBuffer, MTLPixelFormat pixelFormat)
@@ -57,7 +57,7 @@ namespace OpenVulkano::Vulkan
void MetalTextureCache::Close() void MetalTextureCache::Close()
{ {
m_mtlToVkTextureMap.clear(); m_mtlToVkTextureMap.clear();
m_renderer->UnregisterCloseable(this); m_eventHandler->SetInvalid();
m_renderer = nullptr; m_renderer = nullptr;
m_resourceManager = nullptr; m_resourceManager = nullptr;
//TODO delete the texture cache object? //TODO delete the texture cache object?

View File

@@ -89,6 +89,7 @@ namespace OpenVulkano::Vulkan
{ {
context.device->device.destroySemaphore(sema); context.device->device.destroySemaphore(sema);
} }
OnClose();
depthBufferQuery.Close(); depthBufferQuery.Close();
uiRenderer.Close(); uiRenderer.Close();
resourceManager.Close(); resourceManager.Close();

View File

@@ -87,5 +87,7 @@ namespace OpenVulkano::Vulkan
float GetLastQueriedDepthValue() override { return depthBufferQuery.GetQueriedValue(); } float GetLastQueriedDepthValue() override { return depthBufferQuery.GetQueriedValue(); }
void SetQueryDepthValue(const Math::Vector2f& depthCoordinates) override { depthBufferQuery.SetQueryCoordinates(depthCoordinates); } void SetQueryDepthValue(const Math::Vector2f& depthCoordinates) override { depthBufferQuery.SetQueryCoordinates(depthCoordinates); }
Event<> OnClose;
}; };
} }