#pragma once #include #include #include "Logger.h" #include "VulkanDebugManager.h" #include "VulkanDeviceManager.h" #include "GlfwWindowManager.h" #define GLFW_INCLUDE_VULKAN #include 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 Initialize(bool bEnableValidationLayers); void SetupDebug(); void SetupDevice(); // void Initialize(VulkanDebugManager& inDebugManager, bool inValidationEnabled); void Cleanup(); bool IsInitialized() const { return Instance != VK_NULL_HANDLE; } const std::vector& GetValidationLayers() const { return ValidationLayers; } const VkInstance GetInstance() const { return Instance; } 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(); };