#ifndef VULKAN_UTILS_H #define VULKAN_UTILS_H //#define VK_CHECK(x) \ // do \ // { \ // VkResult ret = x; \ // if (ret != VK_SUCCESS) \ // { \ // assert(false); \ // } \ // } while (0) #ifdef _WIN32 #define logOut std::cout #define GLFW_INCLUDE_VULKAN #include #else #include "../app/src/main/cpp/AndroidOut.h" #define logOut aout #define VK_USE_PLATFORM_ANDROID_KHR #include #include #include #endif #include #include #include #include #include #include #include #include void VK_CHECK(VkResult ret); 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