#pragma once
#include <vulkan/vulkan.h>
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;
bool enableDebug = false;
PFN_vkCreateDebugUtilsMessengerEXT createMessenger_ = nullptr;
PFN_vkDestroyDebugUtilsMessengerEXT destroyMessenger_ = nullptr;
VkDebugUtilsMessengerEXT messenger_ = nullptr;
VkPhysicalDevice physicalDevice_ = nullptr;
VkDevice device_ = nullptr;
struct {
uint32_t graphics = 0, presentation = 0;
} queueIndices;
VkQueue graphicsQueue_ = nullptr;