public void Dispose() { // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class // Frame buffer // Color attachment vkDestroyImageView(device, offscreenPass.colorAttachment.view, null); vkDestroyImage(device, offscreenPass.colorAttachment.image, null); vkFreeMemory(device, offscreenPass.colorAttachment.mem, null); // Depth attachment vkDestroyImageView(device, offscreenPass.depthAttachment.view, null); vkDestroyImage(device, offscreenPass.depthAttachment.image, null); vkFreeMemory(device, offscreenPass.depthAttachment.mem, null); vkDestroyRenderPass(device, offscreenPass.renderPass, null); vkDestroySampler(device, offscreenPass.sampler, null); vkDestroyFramebuffer(device, offscreenPass.framebuffer, null); vkDestroyPipeline(device, pipelineRadialBlur, null); vkDestroyPipeline(device, pipelinePhongPass, null); vkDestroyPipeline(device, pipelineColorPass, null); vkDestroyPipeline(device, pipelineOffscreenDisplay, null); vkDestroyPipelineLayout(device, pipelineLayoutRadialBlur, null); vkDestroyPipelineLayout(device, pipelineLayoutScene, null); vkDestroyDescriptorSetLayout(device, setLayoutScene, null); vkDestroyDescriptorSetLayout(device, setLayoutRadialBlur, null); model.destroy(); uniformBufferScene.destroy(); uniformBufferBlurParams.destroy(); VkCommandBuffer cmdBuffer; vkFreeCommandBuffers(device, cmdPool, 1, &cmdBuffer); offscreenPass.commandBuffer = cmdBuffer; vkDestroySemaphore(device, offscreenPass.semaphore, null); textures_gradient.destroy(); }