From fb7af358abb6268fa13327647a78cd3cd9eaca8e Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Fri, 28 Sep 2018 20:41:48 -0400 Subject: [PATCH] Properly cleanup Vulkan resources --- include/renderer.h | 1 + src/renderer.cpp | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/include/renderer.h b/include/renderer.h index e2e4cbc..3874a19 100644 --- a/include/renderer.h +++ b/include/renderer.h @@ -20,6 +20,7 @@ private: bool enableDebug = false; PFN_vkCreateDebugUtilsMessengerEXT createMessenger_ = nullptr; + PFN_vkDestroyDebugUtilsMessengerEXT destroyMessenger_ = nullptr; VkDebugUtilsMessengerEXT messenger_ = nullptr; #endif diff --git a/src/renderer.cpp b/src/renderer.cpp index 8a24c67..85078f0 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -15,6 +15,12 @@ Renderer::Renderer() { } Renderer::~Renderer() { +#ifdef DEBUG + destroyMessenger_(instance_, messenger_, nullptr); +#endif + + vkDestroyDevice(device_, nullptr); + vkDestroyInstance(instance_, nullptr); } @@ -32,6 +38,8 @@ void Renderer::createInstance() { enabledLayers.push_back("VK_LAYER_LUNARG_standard_validation"); } #endif + + delete[] availableLayers; uint32_t extensionCount = 0; vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr); @@ -48,6 +56,8 @@ void Renderer::createInstance() { } } #endif + + delete[] availableExtensions; VkInstanceCreateInfo instanceCreateInfo = {}; instanceCreateInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; @@ -62,7 +72,8 @@ void Renderer::createInstance() { #ifdef DEBUG void Renderer::createDebugMessenger() { createMessenger_ = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance_, "vkCreateDebugUtilsMessengerEXT"); - + destroyMessenger_ = (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance_, "vkDestroyDebugUtilsMessengerEXT"); + VkDebugUtilsMessengerCreateInfoEXT messengerCreateInfo = {}; messengerCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; messengerCreateInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT; @@ -93,6 +104,8 @@ void Renderer::createLogicalDevice() { physicalDevice = physicalDevices[i]; } + delete[] physicalDevices; + uint32_t queueFamilyPropertiesCount = 0; vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamilyPropertiesCount, nullptr); @@ -106,6 +119,8 @@ void Renderer::createLogicalDevice() { graphicsFamilyIndex = i; } + delete[] queueFamilyProperties; + const std::set queueFamilyIndices = {graphicsFamilyIndex}; std::vector deviceQueueCreateInfos; for(auto queueFamilyIndex : queueFamilyIndices) {