diff --git a/src/Window.cpp b/src/Window.cpp index bab07e45437a9c754e06aee6957957ab679cc27e..b59f8681e6a5d3797401194ba1adf3646d3184c2 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -3,21 +3,35 @@ #include <format> #include <stdexcept> -[[nodiscard]] -static auto - create_window(const uint16_t width, const uint16_t height, const std::string& title) - -> GLFWwindow* +static auto init_glfw() -> void { - if (const auto error_code{ glfwInit() }; error_code != GLFW_TRUE) { - throw std::runtime_error{ - std::format("glfwInit failed with error code {}", error_code) - }; + if (const int success{ glfwInit() }; success != GLFW_TRUE) { + const char* description{}; + const int error_code{ glfwGetError(&description) }; + + if (description == nullptr) { + throw std::runtime_error{ + std::format("glfwInit failed with error code {}", error_code) + }; + } + throw std::runtime_error{ std::format( + "glfwInit failed with error code {} - '{}'", error_code, description + ) }; } - if (const auto result{ std::atexit(glfwTerminate) }; result != 0) { + + if (const int result{ std::atexit(glfwTerminate) }; result != 0) { throw std::runtime_error{ - std::format("std::atexit(glfwTerminate) failed with error code {}", result) + std::format("std::atexit failed with error code {}", result) }; } +} + +[[nodiscard]] +static auto + create_window(const uint16_t width, const uint16_t height, const std::string& title) + -> GLFWwindow* +{ + init_glfw(); glfwDefaultWindowHints(); glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); @@ -34,9 +48,7 @@ static auto auto Window::vulkan_instance_extensions() -> std::span<const char* const> { static const std::vector s_extension_names{ []() -> std::vector<const char*> { - if (glfwInit() != GLFW_TRUE) { - return {}; - } + init_glfw(); uint32_t count{}; const char** glfw_extension_names{ glfwGetRequiredInstanceExtensions(&count) };