#pragma once #include "vkn/type.h" namespace vkn { class InstanceCreator { public: pmr::string appName; uint32_t appVersion; pmr::string engineName; uint32_t engineVersion; uint32_t apiVersion; pmr::vector desiredExtensions; pmr::vector desiredLayers; #ifdef Z_RENDER_DEBUG VkDebugUtilsMessageSeverityFlagsEXT messageSeverity; VkDebugUtilsMessageTypeFlagsEXT messageType; PFN_vkDebugUtilsMessengerCallbackEXT debugCallback; VkDebugUtilsMessengerCreateInfoEXT DebugUtilsLayerNext(); #endif public: InstanceCreator(); void AddExtension(string_view extensionName); void AddLayer(string_view layerName); void AddWindowExtension(); void AddInstanceExtension(); void AddDebugExtension(); pmr::vector EnabledExtensionNames(); pmr::vector EnabledLayerNames(); private: static bool CheckAvailableInstanceExtensions(pmr::vector& available_extensions); static bool CheckAvailableInstanceLayers(pmr::vector& available_layers); static bool IsExtensionSupported(pmr::vector const& available_extensions, char const* const extension); static bool IsLayerSupported(pmr::vector const& available_layers, char const* const layer); }; };