diff --git a/openVulkanoCpp/Scene/Drawable.hpp b/openVulkanoCpp/Scene/Drawable.hpp index bc5b49a..5dced77 100644 --- a/openVulkanoCpp/Scene/Drawable.hpp +++ b/openVulkanoCpp/Scene/Drawable.hpp @@ -39,7 +39,7 @@ namespace OpenVulkano::Scene const DrawPhase phase = DrawPhase::MAIN) : m_encoder(encoder), m_drawPhase(phase) {} - ~Drawable() override { if (m_scene) Drawable::Close(); } + ~Drawable() override {/* if (m_scene) Drawable::Close();*/ } void Close() override; diff --git a/openVulkanoCpp/Scene/SimpleDrawable.hpp b/openVulkanoCpp/Scene/SimpleDrawable.hpp index 321eee5..9babb32 100644 --- a/openVulkanoCpp/Scene/SimpleDrawable.hpp +++ b/openVulkanoCpp/Scene/SimpleDrawable.hpp @@ -32,7 +32,7 @@ namespace OpenVulkano::Scene ~SimpleDrawable() { - if (m_mesh) SimpleDrawable::Close(); + //if (m_mesh) SimpleDrawable::Close(); } void Init(Shader* shader, Geometry* mesh, Material* material); @@ -45,4 +45,4 @@ namespace OpenVulkano::Scene [[nodiscard]] Material* GetMaterial() const { return m_material; } }; -} \ No newline at end of file +} diff --git a/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp b/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp index eaf33d1..838e80b 100644 --- a/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp +++ b/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp @@ -242,6 +242,7 @@ namespace OpenVulkano::Vulkan void ResourceManager::RemoveShader(VulkanShader* shader) { + if (!cmdPools) return; const std::unique_lock lock(mutex); std::vector>::iterator object = find_if(shaders.begin(), shaders.end(), diff --git a/openVulkanoCpp/Vulkan/Scene/VulkanShader.cpp b/openVulkanoCpp/Vulkan/Scene/VulkanShader.cpp index 88d2d1a..6187934 100644 --- a/openVulkanoCpp/Vulkan/Scene/VulkanShader.cpp +++ b/openVulkanoCpp/Vulkan/Scene/VulkanShader.cpp @@ -17,14 +17,7 @@ namespace OpenVulkano::Vulkan VulkanShader::~VulkanShader() { if (!shader) return; - device.destroyPipeline(pipeline); - for(auto& shaderModule : shaderModules) - { - device.destroyShaderModule(shaderModule); - } - device.destroyPipelineLayout(pipelineLayout); - for(auto& descriptorSetLayout : descriptorSetLayouts) - device.destroyDescriptorSetLayout(descriptorSetLayout); + Close(); } void VulkanShader::Init(Context* context, Scene::Shader* shader, IShaderOwner* owner) @@ -124,7 +117,17 @@ namespace OpenVulkano::Vulkan void VulkanShader::Close() { - owner->RemoveShader(this); + shader->renderShader = nullptr; + device.destroyPipeline(pipeline); + for(auto& shaderModule : shaderModules) + { + device.destroyShaderModule(shaderModule); + } + device.destroyPipelineLayout(pipelineLayout); + for(auto& descriptorSetLayout : descriptorSetLayouts) + device.destroyDescriptorSetLayout(descriptorSetLayout); + shader = nullptr; + if (owner) owner->RemoveShader(this); } void VulkanShader::CreatePipelineLayout() @@ -150,4 +153,4 @@ namespace OpenVulkano::Vulkan vk::PipelineLayoutCreateInfo plci = { {}, static_cast(descriptorSetLayouts.size()), descriptorSetLayouts.data(), 0, nullptr }; pipelineLayout = this->device.createPipelineLayout(plci); } -} \ No newline at end of file +}