#pragma once #include #include #include #include #include #include #include #include #include namespace Engine { struct Support { Support(); void logSupported(const std::string& header); std::vector supported; std::vector unsupported; std::vector unsupportedCritical; }; struct SwapChainSupportDetails { VkSurfaceCapabilitiesKHR capabilities; std::vector formats; std::vector presentModes; bool adequate() const; }; struct QueueFamilyIndices { std::optional graphicsFamily; std::optional presentFamily; bool isComplete() const; }; Support getVulkanLayers(const std::set& requestedLayers); Support getVulkanExtensions(const std::set& requestedExtensions, const std::vector& criticalExtensions); VkSurfaceFormatKHR chooseSwapSurfaceFormat(const std::vector& availableFormats); VkPresentModeKHR chooseSwapPresentMode(const std::vector& availablePresentModes); std::vector getAvailableVulkanExtensions(); std::vector getAvailableVulkanLayers(); void populateDebugMessengerCreateInfo( VkDebugUtilsMessengerCreateInfoEXT& createInfo, PFN_vkDebugUtilsMessengerCallbackEXT debugCallback ); static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback( VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, const VkDebugUtilsMessengerCallbackDataEXT* callbackData, void* userData ) { std::cerr << "validation layer: " << callbackData->pMessage << std::endl; return true; } VkResult createDebugUtilsMessengerEXT( VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pDebugMessenger ); void destroyDebugUtilsMessengerEXT( VkInstance instance, VkDebugUtilsMessengerEXT debugMessenger, const VkAllocationCallbacks* pAllocator ); std::vector readFile(const std::string& filename); }