Foundation
Loading...
Searching...
No Matches
Application.hpp
Go to the documentation of this file.
1#pragma once
3
4#include "Common.hpp"
5#include "Device.hpp"
6namespace Foundation::RHI {
7 class VulkanDevice;
11 vk::raii::Instance mInstance{ nullptr };
13
15 vk::raii::DebugUtilsMessengerEXT mDebugHandler{ nullptr };
16
18 public:
20
21 const vk::raii::Context mContext;
22 const uint32_t mVulkanApiVersion;
23
24 VulkanApplication(Allocator* allocator, bool headless = false, const char* appName = "Vulkan RHI", const char* engineName = "Foundation", uint32_t apiVersion = VK_API_VERSION_1_3);
25 ~VulkanApplication() override;
27
29 RHIDevice* GetDevice(Handle handle) const override;
30 void DestroyDevice(Handle handle) override;
31
32 [[nodiscard]] virtual String ResolveRelativePathBase(StringView path = "") const override;
33 [[nodiscard]] virtual String ResolveRelativePathData(StringView path = "") const override;
34 [[nodiscard]] virtual Optional<RHIFileInfo> QueryFileInfo(StringView path) const override;
35 virtual bool IterateDirectory(StringView path, RHIDirectoryIteratorCallback cb, void* userData) const override;
36 virtual bool CreateDirectory(StringView path) const override;
37 virtual bool RemoveDirectory(StringView path) const override;
38 virtual bool RemoveFile(StringView path) const override;
39
40 Allocator* GetAllocator() const { return mAllocator; }
41 auto const& GetVkInstance() const { return mInstance; }
42 [[nodiscard]] vk::AllocationCallbacks const* GetVkAllocationCallbacks() const { return mVkAllocationCallbacks.Get(); }
43 [[nodiscard]] VkAllocationCallbacks const* GetVkAllocationCallbacksNative() const { return mVkAllocationCallbacks.GetNative(); }
44 private:
45 bool mHeadless{false};
46 };
47}
Allocator interface (noexcept)
Definition Allocator.hpp:29
The root object of everything RHI. Implementation of this class inherently defines the RHI backend.
Definition Application.hpp:24
Definition Device.hpp:246
Thread-safe type-erased handle dereference facility for RHI Objects.
Definition Details.hpp:147
Scoped move-only RAII handle wrapper for RHI Objects.
Definition Details.hpp:85
Definition Application.hpp:8
virtual bool RemoveFile(StringView path) const override
Definition Application.cpp:249
Vector< RHIDevice::DeviceDesc > mDevices
Definition Application.hpp:14
RHIObjectPool mStorage
Definition Application.hpp:17
Allocator * GetAllocator() const
Definition Application.hpp:40
const vk::raii::Context mContext
Definition Application.hpp:21
VulkanAllocationCallbacks mVkAllocationCallbacks
Definition Application.hpp:10
virtual bool RemoveDirectory(StringView path) const override
Definition Application.cpp:248
vk::raii::DebugUtilsMessengerEXT mDebugHandler
Definition Application.hpp:15
virtual bool CreateDirectory(StringView path) const override
Definition Application.cpp:247
virtual Optional< RHIFileInfo > QueryFileInfo(StringView path) const override
Definition Application.cpp:218
vk::AllocationCallbacks const * GetVkAllocationCallbacks() const
Definition Application.hpp:42
RHIApplicationScopedHandle< RHIDevice > CreateDevice(RHIDevice::DeviceDesc const &desc) override
Definition Application.cpp:172
Vector< vk::raii::PhysicalDevice > mPhysicalDevices
Definition Application.hpp:12
bool mHeadless
Definition Application.hpp:45
virtual String ResolveRelativePathData(StringView path="") const override
Retrives path that's writable and persistent.
Definition Application.cpp:208
RHIDevice * GetDevice(Handle handle) const override
Definition Application.cpp:180
~VulkanApplication() override
Definition Application.cpp:160
Allocator * mAllocator
Definition Application.hpp:9
VkAllocationCallbacks const * GetVkAllocationCallbacksNative() const
Definition Application.hpp:43
const uint32_t mVulkanApiVersion
Definition Application.hpp:22
virtual String ResolveRelativePathBase(StringView path="") const override
Retrives path relative to the application executable.
Definition Application.cpp:198
Span< const RHIDevice::DeviceDesc > EnumerateDevices() const override
Definition Application.cpp:167
vk::raii::Instance mInstance
Definition Application.hpp:11
const String mName
Definition Application.hpp:19
void DestroyDevice(Handle handle) override
Definition Application.cpp:181
virtual bool IterateDirectory(StringView path, RHIDirectoryIteratorCallback cb, void *userData) const override
Iterate over the files in a directory, calling the provided callback for each file.
Definition Application.cpp:243
auto const & GetVkInstance() const
Definition Application.hpp:41
std::vector< T, StlAllocator< T > > Vector
std::vector with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:149
std::basic_string< char, std::char_traits< char >, StlDefaultAllocator< char > > String
Alias for std::basic_string<char>, without an explicit allocator constructor.
Definition Container.hpp:120
std::basic_string_view< char > StringView
Alias for std::basic_string_view<char>
Definition Container.hpp:56
std::span< T > Span
Alias for std::span
Definition Container.hpp:62
Low-level Rendering Hardware Interface (RHI) abstractions.
Definition Application.hpp:3
bool(*)(void *userData, StringView directory, StringView file) RHIDirectoryIteratorCallback
Directory iterator callback.
Definition Application.hpp:19
uintptr_t Handle
Definition Details.hpp:9
std::optional with convenience Get()/GetIf() methods.
Definition Container.hpp:256
vk::AllocationCallbacks const * Get() const
Definition Common.hpp:66
VkAllocationCallbacks const * GetNative() const
Definition Common.hpp:71