#ifndef VULKAN_UTILS_H #define VULKAN_UTILS_H #define VK_CHECK(x) \ do \ { \ VkResult err = x; \ if (err) \ { \ assert(false); \ } \ } while (0) #ifdef _WIN32 #define logOut std::cout #define GLFW_INCLUDE_VULKAN #include #else #define logOut aout #include #endif #include #include #include #include #include #include #include #include #include struct QueueFamilyIndices { std::optional graphicsFamily; std::optional presentFamily; bool isComplete() { return graphicsFamily.has_value() && presentFamily.has_value(); } }; class AppBase { public: std::vector readFile(const std::string& enginePath); VkShaderModule createShaderModule(VkDevice& device, const std::vector& code); const std::vector validationLayers = {"VK_LAYER_KHRONOS_validation"}; protected: VkInstance instance; void createInstance(); bool checkValidationLayerSupport(); void setupDebugMessenger(); bool checkSwapChainSupport(VkPhysicalDevice device, VkSurfaceKHR& surface); bool checkDeviceExtensionSupport(VkPhysicalDevice device); QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device, VkSurfaceKHR& surface); bool isDeviceSuitable(VkPhysicalDevice device, VkSurfaceKHR& surface); void pickPhysicalDevice(VkPhysicalDevice& physicalDevice, VkSurfaceKHR& surface); #ifdef _WIN32 GLFWwindow *window; #endif bool enableValidationLayers = true; VkDebugUtilsMessengerEXT debugMessenger; }; #endif // VULKAN_UTILS_H