Skip to main content

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)
TypeNameDescription
uint64_tframeCurrent frame.
size_tmemoryMemory budget for old buffers in bytes.
uint64_tusecBuffer 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.

NameValueDescription
FlagNone0
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.
DefaultFlagsFlagNone
NumFlags18