Add IContext and IDevice classes with Vulkan backend

This commit is contained in:
2025-11-23 17:52:47 +10:00
parent 6699128476
commit 952efa784b
12 changed files with 211 additions and 0 deletions

View File

View File

View File

@@ -0,0 +1,45 @@
/**
* Copyright (c) 2025, Jayden Grubb <contact@jaydengrubb.com>
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <vulkan/vulkan.h>
#include <format>
#include "backends/vulkan/context.hpp"
#include "backends/vulkan/device.hpp"
namespace nova::gfx {
API VulkanContext::get_api() const {
return API::VULKAN;
}
std::string VulkanContext::get_api_name() const {
return "Vulkan";
}
u32 VulkanContext::get_api_version() const {
u32 version;
vkEnumerateInstanceVersion(&version);
return version;
}
std::string VulkanContext::get_api_version_string() const {
const u32 version = get_api_version();
return std::format(
"{}.{}.{}-{}",
VK_API_VERSION_MAJOR(version),
VK_API_VERSION_MINOR(version),
VK_API_VERSION_PATCH(version),
VK_API_VERSION_VARIANT(version)
);
}
std::unique_ptr<IDevice> VulkanContext::create_device() {
return std::make_unique<VulkanDevice>();
}
} // namespace nova::gfx

View File

@@ -0,0 +1,29 @@
/**
* Copyright (c) 2025, Jayden Grubb <contact@jaydengrubb.com>
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#pragma once
#include <nova/graphics/context.hpp>
#include <vulkan/vulkan.h>
namespace nova::gfx {
class VulkanContext final : public IContext {
public:
API get_api() const override;
std::string get_api_name() const override;
u32 get_api_version() const override;
std::string get_api_version_string() const override;
std::unique_ptr<IDevice> create_device() override;
private:
VkInstance m_instance = VK_NULL_HANDLE;
};
} // namespace nova::gfx

View File

@@ -0,0 +1,15 @@
/**
* Copyright (c) 2025, Jayden Grubb <contact@jaydengrubb.com>
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <vulkan/vulkan.h>
#include "backends/vulkan/device.hpp"
namespace nova::gfx {
// TODO
}

View File

@@ -0,0 +1,18 @@
/**
* Copyright (c) 2025, Jayden Grubb <contact@jaydengrubb.com>
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#pragma once
#include <nova/graphics/device.hpp>
namespace nova::gfx {
class VulkanDevice final : public IDevice {
public:
// TODO
};
} // namespace nova::gfx

View File