MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ upload_index_data()

void MayaFlux::Buffers::GeometryBindingsProcessor::upload_index_data ( const std::string &  name,
GeometryBinding binding 
)
private

Upload index data for one binding, creating or growing the GPU index buffer as needed.

Parameters
nameLogical binding name (for diagnostics only).
bindingBinding to operate on.

Definition at line 226 of file GeometryBindingsProcessor.cpp.

229{
230 if (!binding.node->has_indices()) {
231 return;
232 }
233
234 const auto indices = binding.node->get_index_data();
235 const size_t required = indices.size_bytes();
236
237 if (required == 0) {
238 return;
239 }
240
241 if (!binding.gpu_index_buffer) {
242 binding.gpu_index_buffer = std::make_shared<VKBuffer>(
243 required,
246
247 ensure_initialized(binding.gpu_index_buffer);
248
249 binding.index_staging_buffer = create_staging_buffer(required);
250
252 "Lazily created index buffer for '{}' ({} bytes)", name, required);
253 }
254
256 indices.data(),
257 required,
258 binding.gpu_index_buffer,
259 binding.index_staging_buffer);
260
261 binding.gpu_vertex_buffer->set_index_resources(
262 binding.gpu_index_buffer->get_buffer(),
263 binding.gpu_index_buffer->get_buffer_resources().memory,
264 binding.gpu_index_buffer->get_size_bytes());
265
267 "Uploaded {} indices ({} bytes) for '{}'",
268 binding.node->get_index_count(), required, name);
269}
#define MF_RT_TRACE(comp, ctx,...)
#define MF_DEBUG(comp, ctx,...)
void ensure_initialized(const std::shared_ptr< VKBuffer > &buffer)
Definition VKBuffer.cpp:462
void upload_resizing(const void *data, size_t size, const std::shared_ptr< VKBuffer > &target, const std::shared_ptr< VKBuffer > &staging, float growth_factor)
Upload size bytes to target, growing both buffers first if needed.
std::shared_ptr< VKBuffer > create_staging_buffer(size_t size)
Create staging buffer for transfers.
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Buffers
Buffers, Managers, processors and processing chains.
@ UNKNOWN
Unknown or undefined modality.

References MayaFlux::Journal::BufferProcessing, MayaFlux::Journal::Buffers, MayaFlux::Buffers::create_staging_buffer(), MayaFlux::Buffers::VKBufferProcessor::ensure_initialized(), MayaFlux::Buffers::GeometryBindingsProcessor::GeometryBinding::gpu_index_buffer, MayaFlux::Buffers::GeometryBindingsProcessor::GeometryBinding::gpu_vertex_buffer, MayaFlux::Buffers::VKBuffer::INDEX, MayaFlux::Buffers::GeometryBindingsProcessor::GeometryBinding::index_staging_buffer, MF_DEBUG, MF_RT_TRACE, MayaFlux::Buffers::GeometryBindingsProcessor::GeometryBinding::node, MayaFlux::Kakshya::UNKNOWN, and MayaFlux::Buffers::upload_resizing().

Referenced by processing_function().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: