#pragma once #include #include #include #include "utils.h" namespace Engine { class Surface; class Instance { friend class Surface; public: Instance(); ~Instance(); void initialize(const std::vector& requiredExtensions); void deinitialize(); void addLayer(const std::string& layerName); void addExtension(const std::string& extensionName); void enableDebug(); std::vector getLayers() const; std::vector enumeratePhysicalDevices() const; private: void setupDebugMessenger(); bool hasValidationLayers(); private: bool initialized; bool validationLayersEnabledAndSupported; std::set layerNames; std::set extensionNames; std::vector layers; std::vector extensions; VkInstance vk; VkDebugUtilsMessengerEXT debugMessenger; }; }