From d64b283319e29884952dac01f3900907c60e6ee2 Mon Sep 17 00:00:00 2001 From: Jayden Grubb Date: Fri, 28 Mar 2025 18:51:46 +1000 Subject: [PATCH] Add DX12RenderDriver class stub --- engine/CMakeLists.txt | 9 +++++++++ engine/include/nova/render/render_api.h | 2 +- engine/src/drivers/dx12/render_driver.cpp | 19 +++++++++++++++++++ engine/src/drivers/dx12/render_driver.h | 17 +++++++++++++++++ engine/src/render/renderer.cpp | 8 ++++++++ 5 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 engine/src/drivers/dx12/render_driver.cpp create mode 100644 engine/src/drivers/dx12/render_driver.h diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index 386574f..dcef5e3 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -3,6 +3,7 @@ include(FetchContent) +set(NOVA_DX12 ON CACHE BOOL "Enable DirectX 12 support") set(NOVA_VULKAN ON CACHE BOOL "Enable Vulkan support") set(NOVA_WAYLAND ON CACHE BOOL "Enable Wayland support") set(NOVA_X11 ON CACHE BOOL "Enable X11 support") @@ -26,8 +27,15 @@ else () ${ENGINE_SRC} drivers/linux/system_driver.cpp ) + set(NOVA_DX12 OFF) endif () +if (NOVA_DX12) + set(ENGINE_SRC + ${ENGINE_SRC} + drivers/dx12/render_driver.cpp + ) +endif () if (NOVA_VULKAN) find_package(Vulkan REQUIRED) set(ENGINE_SRC @@ -83,6 +91,7 @@ set(ENGINE_LIBS_PUBLIC spdlog::spdlog ) set(ENGINE_DEFS + $<$:NOVA_DX12> $<$:NOVA_VULKAN> $<$:NOVA_WAYLAND> $<$:NOVA_X11> diff --git a/engine/include/nova/render/render_api.h b/engine/include/nova/render/render_api.h index d42a3d4..0daad12 100644 --- a/engine/include/nova/render/render_api.h +++ b/engine/include/nova/render/render_api.h @@ -7,5 +7,5 @@ #pragma once namespace Nova { - enum class RenderAPI { VULKAN }; + enum class RenderAPI { DX12, VULKAN }; } // namespace Nova diff --git a/engine/src/drivers/dx12/render_driver.cpp b/engine/src/drivers/dx12/render_driver.cpp new file mode 100644 index 0000000..f243d7b --- /dev/null +++ b/engine/src/drivers/dx12/render_driver.cpp @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2025, Jayden Grubb + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "drivers/dx12/render_driver.h" + +#include + +using namespace Nova; + +DX12RenderDriver::DX12RenderDriver() { + NOVA_AUTO_TRACE(); +} + +DX12RenderDriver::~DX12RenderDriver() { + NOVA_AUTO_TRACE(); +} diff --git a/engine/src/drivers/dx12/render_driver.h b/engine/src/drivers/dx12/render_driver.h new file mode 100644 index 0000000..9ec62dc --- /dev/null +++ b/engine/src/drivers/dx12/render_driver.h @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2025, Jayden Grubb + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#pragma once + +#include + +namespace Nova { + class DX12RenderDriver final : public RenderDriver { + public: + DX12RenderDriver(); + ~DX12RenderDriver() override; + }; +} // namespace Nova diff --git a/engine/src/render/renderer.cpp b/engine/src/render/renderer.cpp index 485eefe..7578b3f 100644 --- a/engine/src/render/renderer.cpp +++ b/engine/src/render/renderer.cpp @@ -4,6 +4,9 @@ * SPDX-License-Identifier: BSD-3-Clause */ +#ifdef NOVA_DX12 + #include "drivers/dx12/render_driver.h" +#endif #ifdef NOVA_VULKAN #include "drivers/vulkan/render_driver.h" #endif @@ -22,6 +25,11 @@ void Renderer::init(const RenderAPI api) { NOVA_ASSERT(!s_driver); switch (api) { +#ifdef NOVA_DX12 + case RenderAPI::DX12: + s_driver = std::make_unique(); + break; +#endif #ifdef NOVA_VULKAN case RenderAPI::VULKAN: s_driver = std::make_unique();