Skip to content
Snippets Groups Projects
Commit ee64a065 authored by n0F4x's avatar n0F4x
Browse files

Refactor GLFW initialization

parent e771735a
No related tags found
No related merge requests found
...@@ -3,21 +3,35 @@ ...@@ -3,21 +3,35 @@
#include <format> #include <format>
#include <stdexcept> #include <stdexcept>
[[nodiscard]] static auto init_glfw() -> void
static auto
create_window(const uint16_t width, const uint16_t height, const std::string& title)
-> GLFWwindow*
{ {
if (const auto error_code{ glfwInit() }; error_code != GLFW_TRUE) { if (const int success{ glfwInit() }; success != GLFW_TRUE) {
const char* description{};
const int error_code{ glfwGetError(&description) };
if (description == nullptr) {
throw std::runtime_error{ throw std::runtime_error{
std::format("glfwInit failed with error code {}", error_code) std::format("glfwInit failed with error code {}", error_code)
}; };
} }
if (const auto result{ std::atexit(glfwTerminate) }; result != 0) { throw std::runtime_error{ std::format(
"glfwInit failed with error code {} - '{}'", error_code, description
) };
}
if (const int result{ std::atexit(glfwTerminate) }; result != 0) {
throw std::runtime_error{ 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(); glfwDefaultWindowHints();
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
...@@ -34,9 +48,7 @@ static auto ...@@ -34,9 +48,7 @@ static auto
auto Window::vulkan_instance_extensions() -> std::span<const char* const> auto Window::vulkan_instance_extensions() -> std::span<const char* const>
{ {
static const std::vector s_extension_names{ []() -> std::vector<const char*> { static const std::vector s_extension_names{ []() -> std::vector<const char*> {
if (glfwInit() != GLFW_TRUE) { init_glfw();
return {};
}
uint32_t count{}; uint32_t count{};
const char** glfw_extension_names{ glfwGetRequiredInstanceExtensions(&count) }; const char** glfw_extension_names{ glfwGetRequiredInstanceExtensions(&count) };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment