Foundation
Loading...
Searching...
No Matches
Application.hpp
Go to the documentation of this file.
1#pragma once
2#include "Device.hpp"
3namespace Foundation::RHI {
4 class RHIDevice;
5 class RHIApplication;
7 {
8 // In bytes
9 uint64_t size;
10 // Seconds since UNIX epoch
11 long long ctime, mtime, atime;
12 // Is this a directory?
14 };
19 using RHIDirectoryIteratorCallback = bool (*)(void* userData, StringView directory, StringView file);
24 class RHIApplication : public RHIObject {
25 public:
26 RHIApplication() = default;
28 // RHI
29 [[nodiscard]] virtual Span<const RHIDevice::DeviceDesc> EnumerateDevices() const = 0;
31 [[nodiscard]] virtual RHIDevice* GetDevice(Handle handle) const = 0;
32 virtual void DestroyDevice(Handle handle) = 0;
33
34 // Filesystem
38 [[nodiscard]] virtual String ResolveRelativePathBase(StringView path = "") const = 0;
42 [[nodiscard]] virtual String ResolveRelativePathData(StringView path = "") const = 0;
43 [[nodiscard]] virtual Optional<RHIFileInfo> QueryFileInfo(StringView path) const = 0;
49 virtual bool IterateDirectory(StringView path, RHIDirectoryIteratorCallback cb, void* userData) const = 0;
50 virtual bool CreateDirectory(StringView path) const = 0;
51 virtual bool RemoveDirectory(StringView path) const = 0;
52 virtual bool RemoveFile(StringView path) const = 0;
58 template<typename T>
59 bool IterateDirectory(StringView path, T&& cb) const
60 {
61 auto wrapper = [](void* userData, StringView directory, StringView file) -> bool
62 {
63 auto& func = *static_cast<std::remove_reference_t<T>*>(userData);
64 return func(directory, file);
65 };
66 return IterateDirectory(path, wrapper, &cb);
67 }
68 };
70 static RHIDevice* Get(RHIApplication const* app, Handle handle) {
71 return app->GetDevice(handle);
72 }
73 static void Destroy(RHIApplication* app, Handle handle) {
74 app->DestroyDevice(handle);
75 }
76 };
77}
The root object of everything RHI. Implementation of this class inherently defines the RHI backend.
Definition Application.hpp:24
virtual Optional< RHIFileInfo > QueryFileInfo(StringView path) const =0
bool IterateDirectory(StringView path, T &&cb) const
Iterate over the files in a directory, calling the provided callback for each file.
Definition Application.hpp:59
virtual bool IterateDirectory(StringView path, RHIDirectoryIteratorCallback cb, void *userData) const =0
Iterate over the files in a directory, calling the provided callback for each file.
virtual String ResolveRelativePathData(StringView path="") const =0
Retrives path that's writable and persistent.
virtual String ResolveRelativePathBase(StringView path="") const =0
Retrives path relative to the application executable.
RHIApplication(RHIApplication const &)=delete
virtual bool CreateDirectory(StringView path) const =0
virtual void DestroyDevice(Handle handle)=0
virtual bool RemoveDirectory(StringView path) const =0
virtual RHIApplicationScopedHandle< RHIDevice > CreateDevice(RHIDevice::DeviceDesc const &desc)=0
virtual Span< const RHIDevice::DeviceDesc > EnumerateDevices() const =0
virtual RHIDevice * GetDevice(Handle handle) const =0
virtual bool RemoveFile(StringView path) const =0
Definition Device.hpp:246
Base class for all RHI objects.
Definition Details.hpp:17
Scoped move-only RAII handle wrapper for RHI Objects.
Definition Details.hpp:85
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
Definition Application.hpp:7
uint64_t size
Definition Application.hpp:9
long long mtime
Definition Application.hpp:11
long long ctime
Definition Application.hpp:11
long long atime
Definition Application.hpp:11
bool isDirectory
Definition Application.hpp:13
static void Destroy(RHIApplication *app, Handle handle)
Definition Application.hpp:73
static RHIDevice * Get(RHIApplication const *app, Handle handle)
Definition Application.hpp:70
Provides type traits for types derived from RHIObject.
Definition Details.hpp:31