diff --git a/openVulkanoCpp/Scene/Shader/Shader.hpp b/openVulkanoCpp/Scene/Shader/Shader.hpp index 2befe3e..ed1da7d 100644 --- a/openVulkanoCpp/Scene/Shader/Shader.hpp +++ b/openVulkanoCpp/Scene/Shader/Shader.hpp @@ -96,7 +96,7 @@ namespace OpenVulkano::Scene bool dynamicViewport = true; // If disabled the swapchains fullscreen viewport will always be used, regardless of framebuffer or viewport Shader() = default; - ~Shader() override { /*if (renderShader) Shader::Close();*/ } + ~Shader() override { if (renderShader) Shader::Close(); } Shader& AddShaderProgram(const ShaderProgram& shaderProgram) { diff --git a/openVulkanoCpp/Vulkan/Scene/VulkanShader.cpp b/openVulkanoCpp/Vulkan/Scene/VulkanShader.cpp index 3ac50d0..b675728 100644 --- a/openVulkanoCpp/Vulkan/Scene/VulkanShader.cpp +++ b/openVulkanoCpp/Vulkan/Scene/VulkanShader.cpp @@ -17,8 +17,15 @@ namespace OpenVulkano::Vulkan VulkanShader::~VulkanShader() { - if (!shader) return; - Close(); + if (shader) Close(); + device.destroyPipeline(pipeline); + for(auto& shaderModule : shaderModules) + { + device.destroyShaderModule(shaderModule); + } + device.destroyPipelineLayout(pipelineLayout); + for(auto& descriptorSetLayout : descriptorSetLayouts) + device.destroyDescriptorSetLayout(descriptorSetLayout); } void VulkanShader::Init(Context* context, Scene::Shader* shader, IShaderOwner* owner) @@ -125,16 +132,9 @@ namespace OpenVulkano::Vulkan void VulkanShader::Close() { 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); + owner = nullptr; } void VulkanShader::CreatePipelineLayout()