Foundation
Loading...
Searching...
No Matches
Application.hpp
Go to the documentation of this file.
1#pragma once
2#include <SDL3/SDL.h>
4
5#include "Common.hpp"
6#include "Device.hpp"
7namespace Foundation::RHI {
8 class VulkanDevice;
12 vk::raii::Instance mInstance{ nullptr };
13 vk::raii::PhysicalDevices mPhysicalDevices{ nullptr };
14
16 vk::raii::DebugUtilsMessengerEXT mDebugHandler{ nullptr };
17
19 public:
21
22 const vk::raii::Context mContext;
24
25 VulkanApplication(Allocator* allocator, const char* appName = "Vulkan RHI", const char* engineName = "Foundation", uint32_t apiVersion = VK_API_VERSION_1_3);
26 ~VulkanApplication() override;
28
34 RHIDevice* GetDevice(Handle handle) const override;
35 void DestroyDevice(Handle handle) override;
36
37 Allocator* GetAllocator() const { return mAllocator; }
38 auto const& GetVkInstance() const { return mInstance; }
39 [[nodiscard]] vk::AllocationCallbacks const* GetVkAllocationCallbacks() const { return mVkAllocationCallbacks.Get(); }
41 };
42}
General Purpose Allocator (GPA) interface.
Definition Allocator.hpp:24
The root object of everything RHI. Implementation of this class inherently defines the RHI backend.
Definition Application.hpp:11
Definition Device.hpp:245
Thread-safe type-erased handle dereference facility for RHI Objects.
Definition Details.hpp:148
Scoped move-only RAII handle wrapper for RHI Objects.
Definition Details.hpp:86
Definition Application.hpp:9
vk::raii::PhysicalDevices mPhysicalDevices
Definition Application.hpp:13
Vector< RHIDevice::DeviceDesc > mDevices
Definition Application.hpp:15
RHIObjectPool mStorage
Definition Application.hpp:18
Allocator * GetAllocator() const
Definition Application.hpp:37
const vk::raii::Context mContext
Definition Application.hpp:22
VulkanAllocationCallbacks mVkAllocationCallbacks
Definition Application.hpp:11
vk::raii::DebugUtilsMessengerEXT mDebugHandler
Definition Application.hpp:16
vk::AllocationCallbacks const * GetVkAllocationCallbacks() const
Definition Application.hpp:39
RHIDevice * GetDevice(Handle handle) const override
Definition Application.cpp:99
~VulkanApplication() override
Definition Application.cpp:78
Allocator * mAllocator
Definition Application.hpp:10
VkAllocationCallbacks const * GetVkAllocationCallbacksNative() const
Definition Application.hpp:40
const uint32_t mVulkanApiVersion
Definition Application.hpp:23
Span< const RHIDevice::DeviceDesc > EnumerateDevices() const override
Definition Application.cpp:85
vk::raii::Instance mInstance
Definition Application.hpp:12
const String mName
Definition Application.hpp:20
void DestroyDevice(Handle handle) override
Definition Application.cpp:100
RHIApplicationScopedHandle< RHIDevice > CreateDevice(RHIDevice::DeviceDesc const &desc)
Definition Application.hpp:30
auto const & GetVkInstance() const
Definition Application.hpp:38
RHIApplicationScopedHandle< RHIDevice > CreateDevice(RHIDevice::DeviceDesc const &desc, SDL_Window *window) override
Definition Application.cpp:90
std::vector< T, StlAllocator< T > > Vector
std::vector with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:130
std::basic_string< char > String
Alias for std::basic_string<char>, without an explicit allocator constructor.
Definition Container.hpp:112
T * Construct(Allocator *resource, Args &&...args)
Convenience placement new with object of type T using a Foundation::Core::Allocator.
Definition Allocator.hpp:153
std::span< T > Span
Alias for std::span
Definition Container.hpp:60
Low-level Rendering Hardware Interface (RHI) abstractions.
Definition Application.hpp:4
uintptr_t Handle
Definition Details.hpp:8
vk::AllocationCallbacks const * Get() const
Definition Common.hpp:29
VkAllocationCallbacks const * GetNative() const
Definition Common.hpp:34