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