Cogs.Core
Buffer.cpp
1#include "Buffer.h"
2
3void Cogs::Core::BufferResource::set(size_t offset, size_t size, const uint8_t * data)
4{
5 assert(bytes.size() >= (offset + size) && "Buffer offset + size out of range.");
6
7 std::memcpy((char *)bytes.data() + offset, data, size);
8
9 invalidate(offset, size);
10}
11
12void Cogs::Core::BufferResource::invalidate(size_t /*offset*/, size_t /*size*/)
13{
14 setChanged();
15}
16
18{
19 assert((bufferFlags & BufferFlags::Mapped) == 0 && "Cannot resize mapped buffer.");
20
21 bytes.resize(size);
22
23 invalidate(0, size);
24}
25
27{
28 assert((bufferFlags & BufferFlags::Mapped) == 0 && "Cannot resize mapped buffer.");
29
30 bytes.reset(size, allocator);
31
32 invalidate(0, size);
33}
34
35void * Cogs::Core::BufferResource::map(uint32_t /*flags*/)
36{
37 assert((bufferFlags & BufferFlags::Mapped) == 0 && "Buffer already mapped.");
38
39 bufferFlags |= BufferFlags::Mapped;
40
41 return bytes.data();
42}
43
45{
46 assert((bufferFlags & BufferFlags::Mapped) != 0 && "Buffer not mapped.");
47
48 bufferFlags &= ~BufferFlags::Mapped;
49
50 invalidate(0, size());
51}
Base allocator implementation.
Definition: Allocator.h:30
void setChanged(Cogs::Core::Context *context, Cogs::ComponentModel::Component *component, Reflection::FieldId fieldId)
Must be Called after changing a Component field. Mark field changed. Request engine update.
Definition: FieldSetter.h:25
Buffer state flags.
Definition: Buffer.h:18
@ Mapped
Buffer data is mapped by client code.
Definition: Buffer.h:27
void unmap()
Unmap the buffer, signaling writes to mapped buffer memory are done.
Definition: Buffer.cpp:44
void invalidate(size_t offset, size_t size)
Invalidates buffer contents, signaling data should be updated/transfered to GPU.
Definition: Buffer.cpp:12
void * map(uint32_t flags)
Map the buffer data backing storage, returning a writable pointer.
Definition: Buffer.cpp:35
void resize(size_t size)
Resize the buffer to accomodate the given number of bytes.
Definition: Buffer.cpp:17
size_t size() const
Size of the buffer in bytes.
Definition: Buffer.h:62
void set(size_t offset, size_t size, const uint8_t *data)
Definition: Buffer.cpp:3
void reset(size_t size, Memory::Allocator *allocator)
Reset the buffer, resizing to size bytes using the given allocator.
Definition: Buffer.cpp:26
void * data()
Get a pointer to the buffer data.
Definition: Buffer.h:74