#pragma once #define GLFW_INCLUDE_VULKAN #include // struct FCreateDebugUtilsMessengerExtParams //{ // VkInstance Instance; // const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo; // const VkAllocationCallbacks* pAllocator; // VkDebugUtilsMessengerEXT* pDebugMessenger; // }; // // struct FDestroyDebugUtilsMessengerExtParams //{ // VkInstance Instance; // VkDebugUtilsMessengerEXT DebugMessenger; // const VkAllocationCallbacks* pAllocator; // }; class VulkanDeviceManager { public: VulkanDeviceManager(); ~VulkanDeviceManager(); VulkanDeviceManager(const VulkanDeviceManager&) = delete; VulkanDeviceManager& operator=(const VulkanDeviceManager&) = delete; VulkanDeviceManager(VulkanDeviceManager&& Other) noexcept; VulkanDeviceManager& operator=(VulkanDeviceManager&& Other) noexcept; void Initialize(VkInstance Instance); void Cleanup(); bool IsInitialized() const { return PhysicalDevice != VK_NULL_HANDLE; } private: VkPhysicalDevice PhysicalDevice = VK_NULL_HANDLE; VkInstance Instance = VK_NULL_HANDLE; void PickPhysicalDevice(); // bool IsDeviceSuitable(VkPhysicalDevice Device); int RateDeviceSuitability(VkPhysicalDevice Device); };