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 252 of file GeometryBindingsProcessor.cpp.

255{
256 if (!binding.node->has_indices()) {
257 return;
258 }
259
260 const auto indices = binding.node->get_index_data();
261 const size_t required = indices.size_bytes();
262
263 if (required == 0) {
264 return;
265 }
266
267 if (!binding.gpu_index_buffer) {
268 binding.gpu_index_buffer = std::make_shared<VKBuffer>(
269 required,
272
273 ensure_initialized(binding.gpu_index_buffer);
274
275 binding.index_staging_buffer = create_staging_buffer(required);
276
278 "Lazily created index buffer for '{}' ({} bytes)", name, required);
279 }
280
282 indices.data(),
283 required,
284 binding.gpu_index_buffer,
285 binding.index_staging_buffer);
286
287 binding.gpu_vertex_buffer->set_index_resources(
288 binding.gpu_index_buffer->get_buffer(),
289 binding.gpu_index_buffer->get_buffer_resources().memory,
290 binding.gpu_index_buffer->get_size_bytes());
291
293 "Uploaded {} indices ({} bytes) for '{}'",
294 binding.node->get_index_count(), required, name);
295}
#define MF_RT_TRACE(comp, ctx,...)
#define MF_DEBUG(comp, ctx,...)
void ensure_initialized(const std::shared_ptr< VKBuffer > &buffer)
Definition VKBuffer.cpp:471
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: