#ifndef _VULKAN_GAME_H #define _VULKAN_GAME_H #include "game-gui-sdl.hpp" #ifdef NDEBUG const bool ENABLE_VALIDATION_LAYERS = false; #else const bool ENABLE_VALIDATION_LAYERS = true; #endif class VulkanGame { public: VulkanGame(); ~VulkanGame(); void run(int width, int height, unsigned char guiFlags); private: GameGui* gui; SDL_version sdlVersion; SDL_Window* window; SDL_Renderer* renderer; VkInstance instance; VkDebugUtilsMessengerEXT debugMessenger; VkSurfaceKHR surface; // TODO: Change the variable name to vulkanSurface VkPhysicalDevice physicalDevice = VK_NULL_HANDLE; VkDevice device; VkQueue graphicsQueue; VkQueue presentQueue; VkSwapchainKHR swapChain; vector swapChainImages; VkFormat swapChainImageFormat; VkExtent2D swapChainExtent; vector swapChainImageViews; bool initWindow(int width, int height, unsigned char guiFlags); void initVulkan(); void mainLoop(); void renderUI(); void renderScene(); void cleanup(); void createVulkanInstance(const vector &validationLayers); void setupDebugMessenger(); void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo); void createVulkanSurface(); void pickPhysicalDevice(const vector& deviceExtensions); bool isDeviceSuitable(VkPhysicalDevice device, const vector& deviceExtensions); void createLogicalDevice( const vector validationLayers, const vector& deviceExtensions); void createSwapChain(); void createImageViews(); void cleanupSwapChain(); static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback( VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData); }; #endif // _VULKAN_GAME_H