diff --git a/src/include/graphics/vulkan/ComputePipeline.h b/src/include/graphics/vulkan/ComputePipeline.h index a88fe15c..924023d2 100644 --- a/src/include/graphics/vulkan/ComputePipeline.h +++ b/src/include/graphics/vulkan/ComputePipeline.h @@ -20,7 +20,9 @@ class ComputePipeline : public IPipeline { void init(VkDevice device) override; void bind(VkCommandBuffer cmd) override; void destroy() override; - + ~ComputePipeline() override { + ComputePipeline::destroy(); + } VkPipeline getPipeline() const override { return _pipeline; } VkPipelineLayout getLayout() const override { return _pipelineLayout; } diff --git a/src/include/graphics/vulkan/vk_types.h b/src/include/graphics/vulkan/vk_types.h index 172f637e..fd2b490a 100644 --- a/src/include/graphics/vulkan/vk_types.h +++ b/src/include/graphics/vulkan/vk_types.h @@ -65,6 +65,15 @@ enum class MaterialPass : uint8_t { MainColor, Transparent, Other }; struct MaterialPipeline { VkPipeline pipeline; VkPipelineLayout layout; + VkDevice _device = VK_NULL_HANDLE; + ~MaterialPipeline() { + if (_device != VK_NULL_HANDLE) { + vkDestroyPipelineLayout(_device, layout, nullptr); + vkDestroyPipeline(_device, pipeline, nullptr); + pipeline = VK_NULL_HANDLE; + layout = VK_NULL_HANDLE; + } + } }; struct MaterialInstance {