Update MetalTextureCache close handling
This commit is contained in:
@@ -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(); }
|
||||||
|
|||||||
@@ -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?
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user