diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index 7dd30b8..418f7be 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -23,8 +23,10 @@ FetchContent_MakeAvailable(SDL3) set(ENGINE_SRC core/debug.cpp drivers/vulkan/render_driver.cpp - drivers/win32/system_driver.cpp - drivers/x11/system_driver.cpp + drivers/windows/system_driver.cpp + drivers/linux/system_driver.cpp + drivers/linux/wayland/system_driver.cpp + drivers/linux/x11/system_driver.cpp platform/system.cpp render/renderer.cpp render/render_device.cpp diff --git a/engine/src/drivers/win32/system_driver.cpp b/engine/src/drivers/linux/system_driver.cpp similarity index 63% rename from engine/src/drivers/win32/system_driver.cpp rename to engine/src/drivers/linux/system_driver.cpp index 7c523c8..e86e41c 100644 --- a/engine/src/drivers/win32/system_driver.cpp +++ b/engine/src/drivers/linux/system_driver.cpp @@ -4,16 +4,16 @@ * SPDX-License-Identifier: BSD-3-Clause */ -#include "drivers/win32/system_driver.h" +#include "drivers/linux/system_driver.h" #include using namespace Nova; -Win32SystemDriver::Win32SystemDriver() { +LinuxSystemDriver::LinuxSystemDriver() { NOVA_AUTO_TRACE(); } -Win32SystemDriver::~Win32SystemDriver() { +LinuxSystemDriver::~LinuxSystemDriver() { NOVA_AUTO_TRACE(); } diff --git a/engine/src/drivers/win32/system_driver.h b/engine/src/drivers/linux/system_driver.h similarity index 66% rename from engine/src/drivers/win32/system_driver.h rename to engine/src/drivers/linux/system_driver.h index 0d8d16b..1eac671 100644 --- a/engine/src/drivers/win32/system_driver.h +++ b/engine/src/drivers/linux/system_driver.h @@ -9,9 +9,9 @@ #include namespace Nova { - class Win32SystemDriver final : public SystemDriver { + class LinuxSystemDriver : public SystemDriver { public: - Win32SystemDriver(); - ~Win32SystemDriver() override; + LinuxSystemDriver(); + ~LinuxSystemDriver() override; }; } // namespace Nova diff --git a/engine/src/drivers/linux/wayland/system_driver.cpp b/engine/src/drivers/linux/wayland/system_driver.cpp new file mode 100644 index 0000000..0a3dd97 --- /dev/null +++ b/engine/src/drivers/linux/wayland/system_driver.cpp @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2025, Jayden Grubb + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "drivers/linux/wayland/system_driver.h" + +#include + +using namespace Nova; + +WaylandSystemDriver::WaylandSystemDriver() { + NOVA_AUTO_TRACE(); +} + +WaylandSystemDriver::~WaylandSystemDriver() { + NOVA_AUTO_TRACE(); +} diff --git a/engine/src/drivers/linux/wayland/system_driver.h b/engine/src/drivers/linux/wayland/system_driver.h new file mode 100644 index 0000000..c49a79c --- /dev/null +++ b/engine/src/drivers/linux/wayland/system_driver.h @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2025, Jayden Grubb + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#pragma once + +#include "drivers/linux/system_driver.h" + +namespace Nova { +class WaylandSystemDriver final : public LinuxSystemDriver { + public: + WaylandSystemDriver(); + ~WaylandSystemDriver() override; +}; +} // Nova diff --git a/engine/src/drivers/x11/system_driver.cpp b/engine/src/drivers/linux/x11/system_driver.cpp similarity index 86% rename from engine/src/drivers/x11/system_driver.cpp rename to engine/src/drivers/linux/x11/system_driver.cpp index 0a4aac2..f5eff67 100644 --- a/engine/src/drivers/x11/system_driver.cpp +++ b/engine/src/drivers/linux/x11/system_driver.cpp @@ -4,7 +4,7 @@ * SPDX-License-Identifier: BSD-3-Clause */ -#include "drivers/x11/system_driver.h" +#include "drivers/linux/x11/system_driver.h" #include diff --git a/engine/src/drivers/x11/system_driver.h b/engine/src/drivers/linux/x11/system_driver.h similarity index 70% rename from engine/src/drivers/x11/system_driver.h rename to engine/src/drivers/linux/x11/system_driver.h index 3ef2d15..2070ff1 100644 --- a/engine/src/drivers/x11/system_driver.h +++ b/engine/src/drivers/linux/x11/system_driver.h @@ -6,10 +6,10 @@ #pragma once -#include +#include "drivers/linux/system_driver.h" namespace Nova { - class X11SystemDriver final : public SystemDriver { + class X11SystemDriver final : public LinuxSystemDriver { public: X11SystemDriver(); ~X11SystemDriver() override; diff --git a/engine/src/drivers/windows/system_driver.cpp b/engine/src/drivers/windows/system_driver.cpp new file mode 100644 index 0000000..1ccde16 --- /dev/null +++ b/engine/src/drivers/windows/system_driver.cpp @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2025, Jayden Grubb + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "drivers/windows/system_driver.h" + +#include + +using namespace Nova; + +WindowsSystemDriver::WindowsSystemDriver() { + NOVA_AUTO_TRACE(); +} + +WindowsSystemDriver::~WindowsSystemDriver() { + NOVA_AUTO_TRACE(); +} diff --git a/engine/src/drivers/windows/system_driver.h b/engine/src/drivers/windows/system_driver.h new file mode 100644 index 0000000..7263710 --- /dev/null +++ b/engine/src/drivers/windows/system_driver.h @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2025, Jayden Grubb + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#pragma once + +#include + +namespace Nova { + class WindowsSystemDriver final : public SystemDriver { + public: + WindowsSystemDriver(); + ~WindowsSystemDriver() override; + }; +} // namespace Nova diff --git a/engine/src/platform/system.cpp b/engine/src/platform/system.cpp index ad23c0f..7cb334d 100644 --- a/engine/src/platform/system.cpp +++ b/engine/src/platform/system.cpp @@ -7,8 +7,9 @@ #include #include -#include "drivers/win32/system_driver.h" -#include "drivers/x11/system_driver.h" +#include "drivers/linux/wayland/system_driver.h" +#include "drivers/linux/x11/system_driver.h" +#include "drivers/windows/system_driver.h" using namespace Nova; @@ -19,10 +20,16 @@ void System::init() { NOVA_ASSERT(!s_driver); #ifdef WIN32 - s_driver = std::make_unique(); + s_driver = std::make_unique(); #else - // TODO: Detect Wayland - s_driver = std::make_unique(); + if (std::getenv("WAYLAND_DISPLAY")) { + s_driver = std::make_unique(); + } else if (std::getenv("DISPLAY")) { + s_driver = std::make_unique(); + } else { + NOVA_ERROR("Unsupported windowing system"); + s_driver = std::make_unique(); + } #endif }