#pragma once #include struct RenderTarget { VkSurfaceKHR surface = nullptr; VkSwapchainKHR swapchain = nullptr; }; class Renderer { public: Renderer(); ~Renderer(); RenderTarget* createSurfaceRenderTarget(VkSurfaceKHR surface); void destroyRenderTarget(RenderTarget* target); VkInstance getInstance() const { return instance_; } private: void createInstance(); #ifdef DEBUG void createDebugMessenger(); #endif void createLogicalDevice(); VkInstance instance_ = nullptr; #ifdef DEBUG bool enableDebug = false; PFN_vkCreateDebugUtilsMessengerEXT createMessenger_ = nullptr; PFN_vkDestroyDebugUtilsMessengerEXT destroyMessenger_ = nullptr; VkDebugUtilsMessengerEXT messenger_ = nullptr; #endif VkPhysicalDevice physicalDevice_ = nullptr; VkDevice device_ = nullptr; struct { uint32_t graphics = 0, presentation = 0; } queueIndices; VkQueue graphicsQueue_ = nullptr; };