Add IContext and IDevice classes with Vulkan backend
This commit is contained in:
0
engine/src/backends/dx12/.gitkeep
Normal file
0
engine/src/backends/dx12/.gitkeep
Normal file
0
engine/src/backends/metal/.gitkeep
Normal file
0
engine/src/backends/metal/.gitkeep
Normal file
45
engine/src/backends/vulkan/context.cpp
Normal file
45
engine/src/backends/vulkan/context.cpp
Normal 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
|
||||
29
engine/src/backends/vulkan/context.hpp
Normal file
29
engine/src/backends/vulkan/context.hpp
Normal 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
|
||||
15
engine/src/backends/vulkan/device.cpp
Normal file
15
engine/src/backends/vulkan/device.cpp
Normal 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
|
||||
|
||||
}
|
||||
18
engine/src/backends/vulkan/device.hpp
Normal file
18
engine/src/backends/vulkan/device.hpp
Normal 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
|
||||
0
engine/src/backends/webgpu/.gitkeep
Normal file
0
engine/src/backends/webgpu/.gitkeep
Normal file
Reference in New Issue
Block a user