SceneBuffer
The SceneBuffer class provides a low-level interface to the SceneManager buffers. It manages sub-allocations within a heap buffer and supports efficient data uploads with configurable alignment, usage flags, and memory priority. While the SceneManager offers predefined SceneBuffer instances for scalar, storage, vertex, and index data, users can create additional instances when needed. The class supports callback notifications on allocation and relocation events, allowing users to track buffer offsets dynamically.
#include <scene/TellusimSceneBuffer.h>
Constructors
SceneBuffer()
Methods
Buffer flags.
Flags getFlags() const
bool hasFlag(Flags flags) const
bool hasFlags(Flags flags) const
String getFlagsName() const
Buffer parameters.
size_t getBufferSize() const
size_t getBufferPageSize() const
size_t getBufferAlignment() const
Format getBufferFormat() const
Create buffer.
bool create(const Device &device, size_t size, Flags flags = DefaultFlags, Format format = FormatUnknown)
Add new buffer.
uint32_t addBuffer(size_t size, uint32_t priority = 0)
uint32_t addBuffer(Buffer &buffer, size_t offset, size_t size, uint32_t priority = 0)
uint32_t addBuffer(const void *src, size_t size, uint32_t priority = 0, Flags flags = FlagNone)
uint32_t addBuffer(uint32_t alignment, size_t size, uint32_t priority = 0)
uint32_t addBuffer(uint32_t alignment, Buffer &buffer, size_t offset, size_t size, uint32_t priority = 0)
uint32_t addBuffer(uint32_t alignment, const void *src, size_t size, uint32_t priority = 0, Flags flags = FlagNone)
uint32_t addBuffer(uint32_t alignment, size_t size, const ChangedCallback &func, uint32_t priority = 0)
uint32_t addBuffer(uint32_t alignment, Buffer &buffer, size_t offset, size_t size, const ChangedCallback &func, uint32_t priority = 0)
uint32_t addBuffer(uint32_t alignment, const void *src, size_t size, const ChangedCallback &func, uint32_t priority = 0, Flags flags = FlagNone)
Update buffer data.
bool resizeBuffer(uint32_t id, size_t size, uint32_t priority = 0)
bool setBuffer(uint32_t id, size_t dest_offset, Buffer &buffer, size_t src_offset, size_t size, uint32_t priority = 0)
bool setBuffer(uint32_t id, size_t dest_offset, const void *src, size_t size, uint32_t priority = 0, Flags flags = FlagNone)
Buffer size in bytes.
size_t getBufferSize(uint32_t id)
Buffer offset in alignments.
uint32_t getBufferOffset(uint32_t id)
Release buffer.
bool releaseBuffer(uint32_t id)
Update buffer.
bool update(const Device &device, uint64_t frame = 0, size_t memory = 0, uint64_t usec = 0)
Type | Name | Description |
---|---|---|
uint64_t | frame | Current frame. |
size_t | memory | Memory budget for old buffers in bytes. |
uint64_t | usec | Buffer update time budget in microseconds. |
Dispatch buffer.
void dispatch(const Device &device, Compute &compute)
Heap buffer.
Buffer getHeapBuffer() const
Memory usage.
size_t getMemory() const
Types
using ChangedCallback = Function<void(uint32_t buffer_id, size_t offset)>
Enums
Flags
Buffer flags.
Name | Value | Description |
---|---|---|
FlagNone | 0 | |
FlagVerbose | (1 << 0) | Verbose operations. |
FlagSource | (1 << 1) | Create source buffer. |
FlagSparse | (1 << 2) | Create sparse buffer. |
FlagShared | (1 << 3) | Create shared buffer. |
FlagInterop | (1 << 4) | Create interop buffer. |
FlagUniform | (1 << 5) | Create uniform buffer. |
FlagStorage | (1 << 6) | Create storage buffer. |
FlagAddress | (1 << 7) | Create address buffer. |
FlagTracing | (1 << 8) | Create tracing buffer. |
FlagVertex | (1 << 9) | Create vertex buffer. |
FlagIndex | (1 << 10) | Create index buffer. |
FlagTexel | (1 << 11) | Create texel buffer. |
FlagAlignment4 | (1 << 12) | 4-bytes buffer alignment. |
FlagAlignment8 | (1 << 13) | 8-bytes buffer alignment. |
FlagAlignment16 | (1 << 14) | 16-bytes buffer alignment. |
FlagAlignment32 | (1 << 15) | 32-bytes buffer alignment. |
FlagPersistent | (1 << 16) | Pointer is persistent. |
FlagAllocated | (1 << 17) | Pointer is allocated. |
DefaultFlags | FlagNone | |
NumFlags | 18 |