From c3b623384f25779c7c5ac2f78c14c958a54dc624 Mon Sep 17 00:00:00 2001 From: Warwick Date: Wed, 29 Nov 2023 10:54:15 +0000 Subject: [PATCH] Added RAII vulkan instance destructor --- src/yave_graphics_pipeline.hpp | 2 ++ src/yave_vulkan_instance.cpp | 6 ++++++ src/yave_vulkan_instance.hpp | 17 ++++++++++++----- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/yave_graphics_pipeline.hpp b/src/yave_graphics_pipeline.hpp index 9d1ccde..529e3b0 100644 --- a/src/yave_graphics_pipeline.hpp +++ b/src/yave_graphics_pipeline.hpp @@ -15,6 +15,8 @@ private: void createGraphicsPipeline(const std::string &vertFilepath, const std::string &fragFilepath); + + }; } // namespace yave diff --git a/src/yave_vulkan_instance.cpp b/src/yave_vulkan_instance.cpp index dee8b3f..7cc13a1 100644 --- a/src/yave_vulkan_instance.cpp +++ b/src/yave_vulkan_instance.cpp @@ -1,8 +1,10 @@ #include "yave_vulkan_instance.hpp" +#include namespace yave { YaveVulkanInstance::YaveVulkanInstance() { createInstance(); } +YaveVulkanInstance::~YaveVulkanInstance() { destroyInstance(); } void YaveVulkanInstance::createInstance() { VkApplicationInfo appInfo{}; @@ -32,4 +34,8 @@ void YaveVulkanInstance::createInstance() { } } +void YaveVulkanInstance::destroyInstance() { + vkDestroyInstance(this->instance, nullptr); +} + } // namespace yave diff --git a/src/yave_vulkan_instance.hpp b/src/yave_vulkan_instance.hpp index 1621394..26c6f5e 100644 --- a/src/yave_vulkan_instance.hpp +++ b/src/yave_vulkan_instance.hpp @@ -9,13 +9,20 @@ namespace yave { class YaveVulkanInstance { - private: - VkInstance instance; +private: + VkInstance instance; - void createInstance(); + void createInstance(); - public: - YaveVulkanInstance(); + void destroyInstance(); +public: + // Delete Copy constructors + // This class should match one to one with vulkan instances + YaveVulkanInstance(const YaveVulkanInstance&) = delete; + YaveVulkanInstance &operator=(const YaveVulkanInstance &) = delete; + + YaveVulkanInstance(); + ~YaveVulkanInstance(); }; } // namespace yave