RavEngine
Loading...
Searching...
No Matches
Buffer.hpp
1#pragma once
2#include <RGL/Span.hpp>
3
4namespace RGL {
5
6
7 struct BufferFlags {
8 bool TransferDestination : 1 = false;
9 bool Transfersource : 1 = false;
10 bool ReadbackTarget : 1 = false;
11 bool PixelShaderResource : 1 = false;
12 bool Writable : 1 = false;
13 const char* debugName = nullptr;
14 };
15
16 enum class BufferAccess : uint8_t {
17 Private,
18 Shared
19 };
20
21 struct BufferConfig {
22 uint32_t nElements = 0;
23 uint32_t stride = 0;
24
25 struct Type {
26 bool UniformBuffer : 1 = false;
27 bool StorageBuffer : 1 = false;
28 bool IndexBuffer : 1 = false;
29 bool VertexBuffer : 1 = false;
30 bool IndirectBuffer : 1 = false;
31 } type;
32
33 BufferAccess access;
34 BufferFlags options;
35
36 BufferConfig(decltype(nElements) size, decltype(type) type, decltype(stride) stride, decltype(access) access, decltype(options) options = {}) : nElements(size), type(type), stride(stride), access(access), options(options) {}
37
38 template<typename T>
39 BufferConfig(decltype(type) type, decltype(stride) stride, decltype(access) access, decltype(options) options = {}) : BufferConfig(sizeof(T) / stride, type, stride, access, options) {}
40
41 template<typename T>
42 BufferConfig(decltype(type) type, decltype(stride) stride, const T& t, decltype(access) access, decltype(options) options = {}) : BufferConfig(sizeof(T) / stride, type, stride, access, options) {}
43 };
44
45 struct Range{
46 uint32_t offset = 0, length = 0;
47 };
48
49
50 struct IBuffer {
54 virtual void MapMemory() = 0;
55
59 virtual void UnmapMemory() = 0;
60
61 virtual void SignalRangeChanged(const Range&) = 0;
62
67 virtual void UpdateBufferData(untyped_span newData, decltype(BufferConfig::nElements) offset = 0) = 0;
68
73 virtual void SetBufferData(untyped_span data, decltype(BufferConfig::nElements) offset = 0) = 0;
74
75 virtual decltype(BufferConfig::nElements) getBufferSize() const = 0;
76
77 virtual void* GetMappedDataPtr() = 0;
78
79 virtual uint32_t GetReadonlyBindlessGPUHandle() const = 0;
80 virtual uint32_t GetReadwriteBindlessGPUHandle() const = 0;
81 };
82}
Definition Span.hpp:11
Definition Buffer.hpp:25
Definition Buffer.hpp:21
Definition Buffer.hpp:7
Definition Buffer.hpp:50
virtual void UnmapMemory()=0
virtual void MapMemory()=0
virtual void UpdateBufferData(untyped_span newData, decltype(BufferConfig::nElements) offset=0)=0
virtual void SetBufferData(untyped_span data, decltype(BufferConfig::nElements) offset=0)=0
Definition Buffer.hpp:45