Index: vulkan-game.cpp
===================================================================
--- vulkan-game.cpp	(revision b79417880394af692ba165be4054f0843fdb1c91)
+++ vulkan-game.cpp	(revision e83b155c9ca795fd8d1ec3852877e07734355307)
@@ -231,4 +231,9 @@
    cleanupSwapChain();
 
+   VulkanUtils::destroyVulkanImage(device, floorTextureImage);
+   VulkanUtils::destroyVulkanImage(device, sdlOverlayImage);
+
+   vkDestroySampler(device, textureSampler, nullptr);
+
    for (GraphicsPipeline_Vulkan pipeline : graphicsPipelines) {
       pipeline.cleanupBuffers();
@@ -660,3 +665,8 @@
 
    vkDestroySwapchainKHR(device, swapChain, nullptr);
-}
+
+   for (size_t i = 0; i < swapChainImages.size(); i++) {
+      vkDestroyBuffer(device, uniformBuffers[i], nullptr);
+      vkFreeMemory(device, uniformBuffersMemory[i], nullptr);
+   }
+}
Index: vulkan-ref.cpp
===================================================================
--- vulkan-ref.cpp	(revision b79417880394af692ba165be4054f0843fdb1c91)
+++ vulkan-ref.cpp	(revision e83b155c9ca795fd8d1ec3852877e07734355307)
@@ -1965,12 +1965,10 @@
          createGraphicsPipeline("shaders/scene-vert.spv", "shaders/scene-frag.spv", scenePipeline);
          createDescriptorPool(scenePipeline);
-/*** END OF REFACTORED CODE ***/
          createDescriptorSets(scenePipeline);
 
-/*** START OF REFACTORED CODE ***/
          createGraphicsPipeline("shaders/overlay-vert.spv", "shaders/overlay-frag.spv", overlayPipeline);
          createDescriptorPool(overlayPipeline);
-/*** END OF REFACTORED CODE ***/
          createDescriptorSets(overlayPipeline);
+/*** END OF REFACTORED CODE ***/
 
          createCommandBuffers();
@@ -1980,5 +1978,4 @@
 /*** START OF REFACTORED CODE ***/
          cleanupSwapChain();
-/*** END OF REFACTORED CODE ***/
 
          vkDestroySampler(device, textureSampler, nullptr);
@@ -1992,5 +1989,4 @@
          vkFreeMemory(device, sdlOverlayImageMemory, nullptr);
 
-/*** START OF REFACTORED CODE ***/
          cleanupPipelineBuffers(scenePipeline);
          cleanupPipelineBuffers(overlayPipeline);
@@ -2068,5 +2064,4 @@
 
          vkDestroySwapchainKHR(device, swapChain, nullptr);
-/*** END OF REFACTORED CODE ***/
 
          for (size_t i = 0; i < swapChainImages.size(); i++) {
@@ -2076,5 +2071,4 @@
       }
 
-/*** START OF REFACTORED CODE ***/
       void cleanupPipeline(GraphicsPipelineInfo& pipeline) {
          vkDestroyPipeline(device, pipeline.pipeline, nullptr);
@@ -2082,8 +2076,6 @@
          vkDestroyPipelineLayout(device, pipeline.pipelineLayout, nullptr);
       }
-/*** END OF REFACTORED CODE ***/
 
       void cleanupPipelineBuffers(GraphicsPipelineInfo& pipeline) {
-/*** START OF REFACTORED CODE ***/
          vkDestroyDescriptorSetLayout(device, pipeline.descriptorSetLayout, nullptr);
 /*** END OF REFACTORED CODE ***/
Index: vulkan-utils.cpp
===================================================================
--- vulkan-utils.cpp	(revision b79417880394af692ba165be4054f0843fdb1c91)
+++ vulkan-utils.cpp	(revision e83b155c9ca795fd8d1ec3852877e07734355307)
@@ -475,2 +475,8 @@
    return format == VK_FORMAT_D32_SFLOAT_S8_UINT || format == VK_FORMAT_D24_UNORM_S8_UINT;
 }
+
+void VulkanUtils::destroyVulkanImage(VkDevice& device, VulkanImage& image) {
+   vkDestroyImageView(device, image.imageView, nullptr);
+   vkDestroyImage(device, image.image, nullptr);
+   vkFreeMemory(device, image.imageMemory, nullptr);
+}
Index: vulkan-utils.hpp
===================================================================
--- vulkan-utils.hpp	(revision b79417880394af692ba165be4054f0843fdb1c91)
+++ vulkan-utils.hpp	(revision e83b155c9ca795fd8d1ec3852877e07734355307)
@@ -83,4 +83,6 @@
 
       static bool hasStencilComponent(VkFormat format);
+
+      static void destroyVulkanImage(VkDevice& device, VulkanImage& image);
 };
 
