From 5e7c94ba8f1af85869c9e41543e07ddd7803d822 Mon Sep 17 00:00:00 2001 From: Jayden Grubb Date: Thu, 3 Apr 2025 04:47:22 +1000 Subject: [PATCH] Rename SystemDriver to WindowDriver and removed LinuxSystemDriver Hopefully the last time I change my mind on what I want these to be called. Reason behind this change is to minimize scope of a single module. The WindowDriver should really only handle stuff related to windows. If we need OS level functionality (e.g. get_os_name), that should be the responsibility of the OS driver (or whatever that ends being called). Remember, composition over inheritance. --- engine/CMakeLists.txt | 17 ++----- engine/include/nova/platform/system.h | 4 +- .../{system_driver.h => window_driver.h} | 4 +- engine/src/drivers/linux/system_driver.cpp | 49 ------------------- engine/src/drivers/linux/system_driver.h | 27 ---------- .../window_driver.cpp} | 8 +-- .../window_driver.h} | 8 +-- .../window_driver.cpp} | 8 +-- .../system_driver.h => win32/window_driver.h} | 8 +-- .../window_driver.cpp} | 8 +-- .../system_driver.h => x11/window_driver.h} | 9 ++-- engine/src/platform/system.cpp | 23 +++++++-- 12 files changed, 49 insertions(+), 124 deletions(-) rename engine/include/nova/platform/{system_driver.h => window_driver.h} (80%) delete mode 100644 engine/src/drivers/linux/system_driver.cpp delete mode 100644 engine/src/drivers/linux/system_driver.h rename engine/src/drivers/{linux/wayland/system_driver.cpp => wayland/window_driver.cpp} (68%) rename engine/src/drivers/{linux/wayland/system_driver.h => wayland/window_driver.h} (64%) rename engine/src/drivers/{windows/system_driver.cpp => win32/window_driver.cpp} (69%) rename engine/src/drivers/{windows/system_driver.h => win32/window_driver.h} (66%) rename engine/src/drivers/{linux/x11/system_driver.cpp => x11/window_driver.cpp} (70%) rename engine/src/drivers/{linux/x11/system_driver.h => x11/window_driver.h} (67%) diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index 00e4f9b..31fcb1f 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -22,11 +22,10 @@ endif () set(ENGINE_SRC core/debug.cpp drivers/dx12/render_driver.cpp - drivers/linux/system_driver.cpp - drivers/linux/wayland/system_driver.cpp - drivers/linux/x11/system_driver.cpp - drivers/windows/system_driver.cpp drivers/vulkan/render_driver.cpp + drivers/wayland/window_driver.cpp + drivers/win32/window_driver.cpp + drivers/x11/window_driver.cpp platform/system.cpp render/renderer.cpp render/render_device.cpp @@ -42,18 +41,9 @@ FetchContent_Declare( ) FetchContent_MakeAvailable(spdlog) -FetchContent_Declare( - SDL3 - GIT_REPOSITORY https://github.com/libsdl-org/SDL.git - GIT_TAG 22422f7748d5128135995ed34c8f8012861c7332 # preview-3.1.8 - FIND_PACKAGE_ARGS NAMES SDL3 -) -FetchContent_MakeAvailable(SDL3) - set(ENGINE_INCLUDES_PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src $<$:${Vulkan_INCLUDE_DIRS}> - ${SDL3_INCLUDE_DIRS} ) set(ENGINE_INCLUDES_PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include @@ -61,7 +51,6 @@ set(ENGINE_INCLUDES_PUBLIC ) set(ENGINE_LIBS_PRIVATE $<$:Vulkan::Vulkan> - SDL3::SDL3 ) set(ENGINE_LIBS_PUBLIC spdlog::spdlog diff --git a/engine/include/nova/platform/system.h b/engine/include/nova/platform/system.h index f30d5fc..bd2231e 100644 --- a/engine/include/nova/platform/system.h +++ b/engine/include/nova/platform/system.h @@ -7,13 +7,13 @@ #pragma once #include -#include +#include namespace Nova { class NOVA_API System { public: static void init(); static void shutdown(); - static SystemDriver* get_driver(); + static WindowDriver* get_driver(); }; } // namespace Nova diff --git a/engine/include/nova/platform/system_driver.h b/engine/include/nova/platform/window_driver.h similarity index 80% rename from engine/include/nova/platform/system_driver.h rename to engine/include/nova/platform/window_driver.h index 0f89aab..64a503e 100644 --- a/engine/include/nova/platform/system_driver.h +++ b/engine/include/nova/platform/window_driver.h @@ -9,9 +9,9 @@ #include namespace Nova { - class NOVA_API SystemDriver { + class NOVA_API WindowDriver { public: - virtual ~SystemDriver() = default; + virtual ~WindowDriver() = default; [[nodiscard]] virtual const char* get_surface_extension() const = 0; }; diff --git a/engine/src/drivers/linux/system_driver.cpp b/engine/src/drivers/linux/system_driver.cpp deleted file mode 100644 index 4b5504b..0000000 --- a/engine/src/drivers/linux/system_driver.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright (c) 2025, Jayden Grubb - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -#ifdef NOVA_LINUX - -#include "drivers/linux/system_driver.h" - -#include "drivers/linux/wayland/system_driver.h" // IWYU pragma: keep -#include "drivers/linux/x11/system_driver.h" // IWYU pragma: keep - -#include - -using namespace Nova; - -LinuxSystemDriver::LinuxSystemDriver() { - NOVA_AUTO_TRACE(); -} - -LinuxSystemDriver::~LinuxSystemDriver() { - NOVA_AUTO_TRACE(); -} - -const char* LinuxSystemDriver::get_surface_extension() const { - NOVA_WARN("System driver does not support surfaces"); - return nullptr; -} - -std::unique_ptr LinuxSystemDriver::get_default_driver() { - NOVA_AUTO_TRACE(); - -#ifdef NOVA_WAYLAND - if (std::getenv("WAYLAND_DISPLAY")) { - return std::make_unique(); - } -#endif -#ifdef NOVA_X11 - if (std::getenv("DISPLAY")) { - return std::make_unique(); - } -#endif - - NOVA_WARN("Unsupported display server"); - return std::make_unique(); -} - -#endif // NOVA_LINUX diff --git a/engine/src/drivers/linux/system_driver.h b/engine/src/drivers/linux/system_driver.h deleted file mode 100644 index 6aa2e88..0000000 --- a/engine/src/drivers/linux/system_driver.h +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Copyright (c) 2025, Jayden Grubb - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -#pragma once - -#ifdef NOVA_LINUX - -#include - -#include - -namespace Nova { - class LinuxSystemDriver : public SystemDriver { - public: - LinuxSystemDriver(); - ~LinuxSystemDriver() override; - - [[nodiscard]] const char* get_surface_extension() const override; - - static std::unique_ptr get_default_driver(); - }; -} // namespace Nova - -#endif // NOVA_LINUX diff --git a/engine/src/drivers/linux/wayland/system_driver.cpp b/engine/src/drivers/wayland/window_driver.cpp similarity index 68% rename from engine/src/drivers/linux/wayland/system_driver.cpp rename to engine/src/drivers/wayland/window_driver.cpp index e9689b3..90a91bb 100644 --- a/engine/src/drivers/linux/wayland/system_driver.cpp +++ b/engine/src/drivers/wayland/window_driver.cpp @@ -6,7 +6,7 @@ #ifdef NOVA_WAYLAND -#include "drivers/linux/wayland/system_driver.h" +#include "drivers/wayland/window_driver.h" #ifdef NOVA_VULKAN #include @@ -17,15 +17,15 @@ using namespace Nova; -WaylandSystemDriver::WaylandSystemDriver() { +WaylandWindowDriver::WaylandWindowDriver() { NOVA_AUTO_TRACE(); } -WaylandSystemDriver::~WaylandSystemDriver() { +WaylandWindowDriver::~WaylandWindowDriver() { NOVA_AUTO_TRACE(); } -const char* WaylandSystemDriver::get_surface_extension() const { +const char* WaylandWindowDriver::get_surface_extension() const { #ifdef NOVA_VULKAN return VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME; #else diff --git a/engine/src/drivers/linux/wayland/system_driver.h b/engine/src/drivers/wayland/window_driver.h similarity index 64% rename from engine/src/drivers/linux/wayland/system_driver.h rename to engine/src/drivers/wayland/window_driver.h index ad3c3e3..19032a3 100644 --- a/engine/src/drivers/linux/wayland/system_driver.h +++ b/engine/src/drivers/wayland/window_driver.h @@ -8,13 +8,13 @@ #ifdef NOVA_WAYLAND -#include "drivers/linux/system_driver.h" +#include namespace Nova { - class WaylandSystemDriver final : public LinuxSystemDriver { + class WaylandWindowDriver final : public WindowDriver { public: - WaylandSystemDriver(); - ~WaylandSystemDriver() override; + WaylandWindowDriver(); + ~WaylandWindowDriver() override; [[nodiscard]] const char* get_surface_extension() const override; }; diff --git a/engine/src/drivers/windows/system_driver.cpp b/engine/src/drivers/win32/window_driver.cpp similarity index 69% rename from engine/src/drivers/windows/system_driver.cpp rename to engine/src/drivers/win32/window_driver.cpp index cdb4d8d..34ccbf4 100644 --- a/engine/src/drivers/windows/system_driver.cpp +++ b/engine/src/drivers/win32/window_driver.cpp @@ -6,7 +6,7 @@ #ifdef NOVA_WINDOWS -#include "drivers/windows/system_driver.h" +#include "drivers/win32/window_driver.h" #ifdef NOVA_VULKAN #include @@ -17,15 +17,15 @@ using namespace Nova; -WindowsSystemDriver::WindowsSystemDriver() { +Win32WindowDriver::Win32WindowDriver() { NOVA_AUTO_TRACE(); } -WindowsSystemDriver::~WindowsSystemDriver() { +Win32WindowDriver::~Win32WindowDriver() { NOVA_AUTO_TRACE(); } -const char* WindowsSystemDriver::get_surface_extension() const { +const char* Win32WindowDriver::get_surface_extension() const { #ifdef NOVA_VULKAN return VK_KHR_WIN32_SURFACE_EXTENSION_NAME; #else diff --git a/engine/src/drivers/windows/system_driver.h b/engine/src/drivers/win32/window_driver.h similarity index 66% rename from engine/src/drivers/windows/system_driver.h rename to engine/src/drivers/win32/window_driver.h index e728827..7d4a6c6 100644 --- a/engine/src/drivers/windows/system_driver.h +++ b/engine/src/drivers/win32/window_driver.h @@ -8,14 +8,14 @@ #ifdef NOVA_WINDOWS -#include +#include #include namespace Nova { - class WindowsSystemDriver final : public SystemDriver { + class Win32WindowDriver final : public WindowDriver { public: - WindowsSystemDriver(); - ~WindowsSystemDriver() override; + Win32WindowDriver(); + ~Win32WindowDriver() override; [[nodiscard]] const char* get_surface_extension() const override; }; diff --git a/engine/src/drivers/linux/x11/system_driver.cpp b/engine/src/drivers/x11/window_driver.cpp similarity index 70% rename from engine/src/drivers/linux/x11/system_driver.cpp rename to engine/src/drivers/x11/window_driver.cpp index 6ca3451..3974282 100644 --- a/engine/src/drivers/linux/x11/system_driver.cpp +++ b/engine/src/drivers/x11/window_driver.cpp @@ -6,7 +6,7 @@ #ifdef NOVA_X11 -#include "drivers/linux/x11/system_driver.h" +#include "drivers/x11/window_driver.h" #ifdef NOVA_VULKAN #include @@ -17,15 +17,15 @@ using namespace Nova; -X11SystemDriver::X11SystemDriver() { +X11WindowDriver::X11WindowDriver() { NOVA_AUTO_TRACE(); } -X11SystemDriver::~X11SystemDriver() { +X11WindowDriver::~X11WindowDriver() { NOVA_AUTO_TRACE(); } -const char* X11SystemDriver::get_surface_extension() const { +const char* X11WindowDriver::get_surface_extension() const { #ifdef NOVA_VULKAN return VK_KHR_XLIB_SURFACE_EXTENSION_NAME; #else diff --git a/engine/src/drivers/linux/x11/system_driver.h b/engine/src/drivers/x11/window_driver.h similarity index 67% rename from engine/src/drivers/linux/x11/system_driver.h rename to engine/src/drivers/x11/window_driver.h index 9ae5f9c..f7b9255 100644 --- a/engine/src/drivers/linux/x11/system_driver.h +++ b/engine/src/drivers/x11/window_driver.h @@ -8,15 +8,14 @@ #ifdef NOVA_X11 -#include "drivers/linux/system_driver.h" - #include +#include namespace Nova { - class X11SystemDriver final : public LinuxSystemDriver { + class X11WindowDriver final : public WindowDriver { public: - X11SystemDriver(); - ~X11SystemDriver() override; + X11WindowDriver(); + ~X11WindowDriver() override; [[nodiscard]] const char* get_surface_extension() const override; }; diff --git a/engine/src/platform/system.cpp b/engine/src/platform/system.cpp index a6a95ad..56f22fa 100644 --- a/engine/src/platform/system.cpp +++ b/engine/src/platform/system.cpp @@ -4,8 +4,9 @@ * SPDX-License-Identifier: BSD-3-Clause */ -#include "drivers/linux/system_driver.h" // IWYU pragma: keep -#include "drivers/windows/system_driver.h" // IWYU pragma: keep +#include "drivers/wayland/window_driver.h" // IWYU pragma: keep +#include "drivers/win32/window_driver.h" // IWYU pragma: keep +#include "drivers/x11/window_driver.h" // IWYU pragma: keep #include #include @@ -14,7 +15,7 @@ using namespace Nova; -static std::unique_ptr s_driver; +static std::unique_ptr s_driver; void System::init() { NOVA_AUTO_TRACE(); @@ -23,7 +24,19 @@ void System::init() { #ifdef NOVA_WINDOWS s_driver = std::make_unique(); #elif NOVA_LINUX - s_driver = LinuxSystemDriver::get_default_driver(); +#ifdef NOVA_WAYLAND + if (std::getenv("WAYLAND_DISPLAY")) { + s_driver = std::make_unique(); + return; + } +#endif +#ifdef NOVA_X11 + if (std::getenv("DISPLAY")) { + s_driver = std::make_unique(); + return; + } +#endif + throw std::runtime_error("No suitable display server found"); #else throw std::runtime_error("Unsupported platform"); #endif @@ -34,7 +47,7 @@ void System::shutdown() { s_driver.reset(); } -SystemDriver* System::get_driver() { +WindowDriver* System::get_driver() { NOVA_ASSERT(s_driver); return s_driver.get(); }