#include <structbuffer.h>
Public Member Functions | |
StructBuffer (Core &core) | |
StructBuffer (Core &core, EMemoryUsage usage) | |
virtual bool | init (utility::ErrorState &errorState) override |
virtual uint | getCount () const override |
virtual size_t | getSize () const override |
virtual uint32 | getElementSize () const override |
virtual bool | isInitialized () const override |
bool | setData (void *data, size_t size, utility::ErrorState &error) |
![]() | |
GPUBuffer (Core &core) | |
GPUBuffer (Core &core, EMemoryUsage usage) | |
virtual | ~GPUBuffer () |
virtual VkBuffer | getBuffer () const |
virtual const BufferData & | getBufferData () const |
virtual VkBufferUsageFlags | getBufferUsageFlags () const |
void | ensureUsage (VkBufferUsageFlags usage) |
void | asyncGetData (std::function< void(const void *, size_t)> copyFunction) |
![]() | |
Resource () | |
![]() | |
Object () | |
virtual | ~Object () |
virtual void | onDestroy () |
Object (Object &)=delete | |
Object & | operator= (const Object &)=delete |
Object (Object &&)=delete | |
Object & | operator= (Object &&)=delete |
Public Attributes | |
bool | mClear = false |
Property 'Clear' If no fill policy is set, performs an initial clear-to-zero transfer operation on the device buffer on init() More... | |
ResourcePtr< StructFillPolicy > | mFillPolicy = nullptr |
Property 'FillPolicy' Optional fill policy to fill the buffer with on initialization. More... | |
StructBufferDescriptor | mDescriptor |
Property 'Descriptor' The descriptor that defines the buffer layout. More... | |
![]() | |
nap::Signal | bufferChanged |
EMemoryUsage | mMemoryUsage = EMemoryUsage::Static |
Property 'Usage' How the buffer is used: initialized once (Static), updated frequently from CPU to GPU (DynamicWrite) or read from GPU to CPU (DynamicRead). More... | |
![]() | |
std::string | mID |
Property: 'mID' unique name of the object. Used as an identifier by the system. More... | |
Additional Inherited Members | |
![]() | |
static bool | isIDProperty (rtti::Instance &object, const rtti::Property &property) |
![]() | |
bool | allocateInternal (size_t size, utility::ErrorState &errorState) |
bool | setDataInternal (const void *data, size_t size, size_t reservedSize, utility::ErrorState &errorState) |
void | requestClear () |
![]() | |
RenderService * | mRenderService = nullptr |
Handle to the render service. More... | |
std::vector< BufferData > | mRenderBuffers |
Render accessible buffers. More... | |
std::vector< BufferData > | mStagingBuffers |
Staging buffers, used when uploading or downloading data. More... | |
uint32 | mSize = 0 |
Current used buffer size in bytes. More... | |
int | mCurrentRenderBufferIndex = 0 |
Current render buffer index. More... | |
int | mCurrentStagingBufferIndex = 0 |
Current staging buffer index. More... | |
std::vector< int > | mDownloadStagingBufferIndices |
Staging buffer indices associated with a frameindex. More... | |
GPU Buffer for storing (nested) data structures.
Allocates all required host (staging) and device buffers based on the specified properties.
The layout of the struct buffer is defined by a StructBufferDescriptor. This descriptor is used to denote the buffer layout, allocate the right amount of memory, and possibly store information on how fill the buffer accordingly. As the size of the buffer is determined by the descriptor, it is important that it matches the declaration of the shader variable it is bound to. Initialization of buffer bindings may fail otherwise.
If a 'FillPolicy' is available, the buffer will also be uploaded to immediately. Alternatively, 'Clear' sets all of the buffer values to zero on init(). 'FillPolicy' and 'Clear' are mutually exclusive and the former has priority over the latter.
Supported types are primitive types that can be mapped to VkFormat.
T | primitive value data type |
PROPERTY | property for identifying the buffer usage and access type |
StructBuffer | ( | Core & | core | ) |
StructBuffer | ( | Core & | core, |
EMemoryUsage | usage | ||
) |
|
overridevirtual |
Implements GPUBuffer.
|
overridevirtual |
Implements GPUBuffer.
|
overridevirtual |
Implements GPUBuffer.
|
overridevirtual |
Initialize this buffer. This will allocate all required staging and device buffers based on the buffer properties. If a fill policy is available, the buffer will also be uploaded to immediately.
Reimplemented from GPUBuffer.
|
overridevirtual |
Implements GPUBuffer.
bool setData | ( | void * | data, |
size_t | size, | ||
utility::ErrorState & | error | ||
) |
Uploads data to the GPU based on the settings provided. This function automatically allocates GPU memory if required.
data | pointer to the block of data that needs to be uploaded. |
size | the size of the data in bytes |
error | contains the error if upload operation failed |
bool mClear = false |
Property 'Clear' If no fill policy is set, performs an initial clear-to-zero transfer operation on the device buffer on init()
StructBufferDescriptor mDescriptor |
Property 'Descriptor' The descriptor that defines the buffer layout.
ResourcePtr<StructFillPolicy> mFillPolicy = nullptr |
Property 'FillPolicy' Optional fill policy to fill the buffer with on initialization.