From 8eb5a39c4cec0a1e3dfd1464097897f525098a44 Mon Sep 17 00:00:00 2001 From: Jayden Grubb Date: Fri, 28 Mar 2025 13:36:24 +1000 Subject: [PATCH] Add System, SystemDriver, Win32SystemDriver and X11SystemDriver classes --- editor/src/main.cpp | 3 ++ engine/CMakeLists.txt | 3 ++ engine/include/nova/platform/system.h | 19 ++++++++++ engine/include/nova/platform/system_driver.h | 16 +++++++++ engine/src/drivers/win32/system_driver.cpp | 19 ++++++++++ engine/src/drivers/win32/system_driver.h | 17 +++++++++ engine/src/drivers/x11/system_driver.cpp | 19 ++++++++++ engine/src/drivers/x11/system_driver.h | 17 +++++++++ engine/src/platform/system.cpp | 37 ++++++++++++++++++++ 9 files changed, 150 insertions(+) create mode 100644 engine/include/nova/platform/system.h create mode 100644 engine/include/nova/platform/system_driver.h create mode 100644 engine/src/drivers/win32/system_driver.cpp create mode 100644 engine/src/drivers/win32/system_driver.h create mode 100644 engine/src/drivers/x11/system_driver.cpp create mode 100644 engine/src/drivers/x11/system_driver.h create mode 100644 engine/src/platform/system.cpp diff --git a/editor/src/main.cpp b/editor/src/main.cpp index aee95cf..bb61616 100644 --- a/editor/src/main.cpp +++ b/editor/src/main.cpp @@ -5,6 +5,7 @@ */ #include +#include #include #include @@ -14,9 +15,11 @@ using namespace Nova; int main() { Debug::get_logger()->set_level(spdlog::level::trace); + System::init(); Renderer::create(RenderAPI::VULKAN); Renderer::get_driver()->create_device(RenderDevice::AUTO); Renderer::shutdown(); + System::shutdown(); return EXIT_SUCCESS; } diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index 80486b4..7dd30b8 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -23,6 +23,9 @@ FetchContent_MakeAvailable(SDL3) set(ENGINE_SRC core/debug.cpp drivers/vulkan/render_driver.cpp + drivers/win32/system_driver.cpp + drivers/x11/system_driver.cpp + platform/system.cpp render/renderer.cpp render/render_device.cpp ) diff --git a/engine/include/nova/platform/system.h b/engine/include/nova/platform/system.h new file mode 100644 index 0000000..f30d5fc --- /dev/null +++ b/engine/include/nova/platform/system.h @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2025, Jayden Grubb + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#pragma once + +#include +#include + +namespace Nova { + class NOVA_API System { + public: + static void init(); + static void shutdown(); + static SystemDriver* get_driver(); + }; +} // namespace Nova diff --git a/engine/include/nova/platform/system_driver.h b/engine/include/nova/platform/system_driver.h new file mode 100644 index 0000000..2f97790 --- /dev/null +++ b/engine/include/nova/platform/system_driver.h @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2025, Jayden Grubb + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#pragma once + +#include + +namespace Nova { + class NOVA_API SystemDriver { + public: + virtual ~SystemDriver() = default; + }; +} // namespace Nova diff --git a/engine/src/drivers/win32/system_driver.cpp b/engine/src/drivers/win32/system_driver.cpp new file mode 100644 index 0000000..7c523c8 --- /dev/null +++ b/engine/src/drivers/win32/system_driver.cpp @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2025, Jayden Grubb + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "drivers/win32/system_driver.h" + +#include + +using namespace Nova; + +Win32SystemDriver::Win32SystemDriver() { + NOVA_AUTO_TRACE(); +} + +Win32SystemDriver::~Win32SystemDriver() { + NOVA_AUTO_TRACE(); +} diff --git a/engine/src/drivers/win32/system_driver.h b/engine/src/drivers/win32/system_driver.h new file mode 100644 index 0000000..0d8d16b --- /dev/null +++ b/engine/src/drivers/win32/system_driver.h @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2025, Jayden Grubb + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#pragma once + +#include + +namespace Nova { + class Win32SystemDriver final : public SystemDriver { + public: + Win32SystemDriver(); + ~Win32SystemDriver() override; + }; +} // namespace Nova diff --git a/engine/src/drivers/x11/system_driver.cpp b/engine/src/drivers/x11/system_driver.cpp new file mode 100644 index 0000000..0a4aac2 --- /dev/null +++ b/engine/src/drivers/x11/system_driver.cpp @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2025, Jayden Grubb + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "drivers/x11/system_driver.h" + +#include + +using namespace Nova; + +X11SystemDriver::X11SystemDriver() { + NOVA_AUTO_TRACE(); +} + +X11SystemDriver::~X11SystemDriver() { + NOVA_AUTO_TRACE(); +} diff --git a/engine/src/drivers/x11/system_driver.h b/engine/src/drivers/x11/system_driver.h new file mode 100644 index 0000000..3ef2d15 --- /dev/null +++ b/engine/src/drivers/x11/system_driver.h @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2025, Jayden Grubb + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#pragma once + +#include + +namespace Nova { + class X11SystemDriver final : public SystemDriver { + public: + X11SystemDriver(); + ~X11SystemDriver() override; + }; +} // namespace Nova diff --git a/engine/src/platform/system.cpp b/engine/src/platform/system.cpp new file mode 100644 index 0000000..ad23c0f --- /dev/null +++ b/engine/src/platform/system.cpp @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2025, Jayden Grubb + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include +#include + +#include "drivers/win32/system_driver.h" +#include "drivers/x11/system_driver.h" + +using namespace Nova; + +static std::unique_ptr s_driver; + +void System::init() { + NOVA_AUTO_TRACE(); + NOVA_ASSERT(!s_driver); + +#ifdef WIN32 + s_driver = std::make_unique(); +#else + // TODO: Detect Wayland + s_driver = std::make_unique(); +#endif +} + +void System::shutdown() { + NOVA_AUTO_TRACE(); + s_driver.reset(); +} + +SystemDriver* System::get_driver() { + NOVA_ASSERT(s_driver); + return s_driver.get(); +}