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(); }