#include "src/VulkanRenderer.h" #include "src/managers/GLFWManager.h" #include "src/managers/VulkanManager.h" namespace PB::Renderer { void CleanupAllAndExit(int code) { if (!GLFWManager::Cleanup()) std::exit(EXIT_FAILURE); if (VulkanManager::Cleanup()) std::exit(EXIT_FAILURE); std::exit(code); } } int main() { using namespace PB::Renderer; // Project namespace /* Initializes GLFW and creates window */ if (!GLFWManager::Init()) return -1; GLFWwindow* window = GLFWManager::CreateWindow(800, 600, "Vulkan window"); if (!window) return -1; /* Runs Vulkan initialisation functions */ if (const std::optional instance = VulkanManager::Init(); !instance) { GLFWManager::Cleanup(); } if (const std::optional surface = VulkanManager::CreateSurface(window); !surface) { CleanupAllAndExit(EXIT_FAILURE); } if (!VulkanManager::PickPhysicalDevice()) { CleanupAllAndExit(EXIT_FAILURE); } /* Polls window events whilst it is still open */ while (!glfwWindowShouldClose(window)) { glfwPollEvents(); } /* Cleans up GLFW and Vulkan */ CleanupAllAndExit(EXIT_SUCCESS); }