Add basic Renderer and RenderDriver classes

This commit is contained in:
2025-02-12 00:59:07 +10:00
parent 5f718ff966
commit 3009a4c6d9
9 changed files with 186 additions and 23 deletions

View File

@@ -0,0 +1,31 @@
/**
* Copyright (c) 2025, Jayden Grubb <contact@jaydengrubb.com>
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "drivers/vulkan/render_driver.h"
#include <vulkan/vulkan.h>
#include <cstdio>
using namespace Nova;
VulkanRenderDriver::VulkanRenderDriver() {
std::printf("VulkanRenderDriver::VulkanRenderDriver()\n");
}
VulkanRenderDriver::~VulkanRenderDriver() {
std::printf("VulkanRenderDriver::~VulkanRenderDriver()\n");
}
RenderAPI VulkanRenderDriver::get_api() const {
return RenderAPI::VULKAN;
}
u32 VulkanRenderDriver::get_api_version() const {
u32 version;
vkEnumerateInstanceVersion(&version);
return version;
}

View File

@@ -0,0 +1,20 @@
/**
* Copyright (c) 2025, Jayden Grubb <contact@jaydengrubb.com>
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#pragma once
#include <nova/render/render_driver.h>
namespace Nova {
class VulkanRenderDriver final : public RenderDriver {
public:
VulkanRenderDriver();
~VulkanRenderDriver() override;
[[nodiscard]] RenderAPI get_api() const override;
[[nodiscard]] u32 get_api_version() const override;
};
} // namespace Nova

View File

@@ -0,0 +1,47 @@
/**
* Copyright (c) 2025, Jayden Grubb <contact@jaydengrubb.com>
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <nova/render/renderer.h>
#include <memory>
#include "drivers/vulkan/render_driver.h"
using namespace Nova;
static Renderer* s_instance = nullptr;
void Renderer::create(const RenderAPI api) {
if (s_instance) {
// TODO: Log error
return;
}
s_instance = new Renderer();
switch (api) {
case RenderAPI::VULKAN:
get()->m_driver = std::make_unique<VulkanRenderDriver>();
break;
default:
// TODO: Log error
break;
}
}
void Renderer::shutdown() {
if (!s_instance) {
// TODO: Log error
return;
}
delete s_instance;
}
Renderer* Renderer::get() {
return s_instance;
}
RenderDriver* Renderer::get_driver() {
return get()->m_driver.get();
}

View File

@@ -1,13 +0,0 @@
/**
* Copyright (c) 2025, Jayden Grubb <contact@jaydengrubb.com>
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <nova/test.h>
#include <cstdio>
void func() {
std::printf("Hello, world!\n");
}