From be623d7545686ede1725d23324862342e0255788 Mon Sep 17 00:00:00 2001
From: n0F4x <ggabor2002@gmail.com>
Date: Sun, 7 Jul 2024 12:06:56 +0200
Subject: [PATCH] Refactor GLFW initialization

---
 src/Renderer.cpp |  4 ++--
 src/Window.cpp   | 38 +++++++++++++++++++++++++-------------
 2 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/src/Renderer.cpp b/src/Renderer.cpp
index 9896107..e173301 100644
--- a/src/Renderer.cpp
+++ b/src/Renderer.cpp
@@ -174,7 +174,7 @@ static auto create_render_pass(const vk::Format color_format, const vk::Device d
         .dstAccessMask = vk::AccessFlagBits::eColorAttachmentWrite,
     };
 
-    const vk::RenderPassCreateInfo render_pass_create_info{
+    const vk::RenderPassCreateInfo create_info{
         .attachmentCount = static_cast<uint32_t>(attachment_descriptions.size()),
         .pAttachments    = attachment_descriptions.data(),
         .subpassCount    = 1,
@@ -183,7 +183,7 @@ static auto create_render_pass(const vk::Format color_format, const vk::Device d
         .pDependencies   = &subpass_dependency,
     };
 
-    return device.createRenderPassUnique(render_pass_create_info);
+    return device.createRenderPassUnique(create_info);
 }
 
 Renderer::Renderer(const Window& window)
diff --git a/src/Window.cpp b/src/Window.cpp
index bab07e4..bfa48de 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 void init_glfw()
 {
-    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) };
-- 
GitLab