#pragma once #include #include #define GLFW_INCLUDE_VULKAN #include #include "VulkanDebugManager.h" #include "VulkanDeviceManager.h" const std::vector ValidationLayers = { "VK_LAYER_KHRONOS_validation" }; struct FVulkanConfig { bool bValidationEnabled = true; bool bVerboseLogging = false; }; class VulkanInstanceManager { public: VulkanInstanceManager(); ~VulkanInstanceManager(); VulkanInstanceManager(const VulkanInstanceManager&) = delete; VulkanInstanceManager& operator=(const VulkanInstanceManager&) = delete; VulkanInstanceManager(VulkanInstanceManager&& Other) noexcept; VulkanInstanceManager& operator=(VulkanInstanceManager&& Other) noexcept; void Initialize(const FVulkanConfig& Config); void Cleanup(); bool IsInitialized() const { return Instance != VK_NULL_HANDLE; } private: std::unique_ptr VkDebugManager = nullptr; std::unique_ptr VkDeviceManager = nullptr; bool bValidationEnabled = false; bool bVerboseLogging = false; VkInstance Instance = VK_NULL_HANDLE; std::vector GetRequiredExtensions(); bool CheckValidationLayerSupport(); void CreateInstance(); };