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

◆ bind_geometry_node()

void MayaFlux::Buffers::GeometryBindingsProcessor::bind_geometry_node ( const std::string &  name,
const std::shared_ptr< Nodes::GpuSync::GeometryWriterNode > &  node,
const std::shared_ptr< VKBuffer > &  vertex_buffer 
)

Bind a geometry node to a GPU vertex buffer.

Parameters
nameLogical name for this binding
nodeGeometryWriterNode to read vertices from
vertex_bufferGPU vertex buffer to upload to

If vertex_buffer is device-local, a staging buffer is automatically created. If vertex_buffer is host-visible, no staging is needed.

Definition at line 15 of file GeometryBindingsProcessor.cpp.

19{
20 if (!node) {
21 error<std::invalid_argument>(
24 std::source_location::current(),
25 "Cannot bind null geometry node '{}'", name);
26 }
27
28 if (!vertex_buffer) {
29 error<std::invalid_argument>(
32 std::source_location::current(),
33 "Cannot bind geometry node '{}' to null vertex buffer", name);
34 }
35
36 size_t vertex_data_size = node->get_vertex_buffer_size_bytes();
37
38 if (vertex_buffer->get_size_bytes() < vertex_data_size) {
40 "Vertex buffer for '{}' may be too small: {} bytes required, {} available. "
41 "Will upload partial data.",
42 name, vertex_data_size, vertex_buffer->get_size_bytes());
43 }
44
45 std::shared_ptr<VKBuffer> staging = nullptr;
46 if (!vertex_buffer->is_host_visible()) {
47 size_t staging_size = std::max<size_t>(vertex_buffer->get_size_bytes(), vertex_data_size);
48 staging = create_staging_buffer(staging_size);
49
51 "Created staging buffer for device-local geometry '{}' ({} bytes)",
52 name, staging_size);
53 } else {
55 "No staging needed for host-visible geometry '{}'", name);
56 }
57
58 m_bindings[name] = GeometryBinding {
59 .node = node,
60 .gpu_vertex_buffer = vertex_buffer,
61 .staging_buffer = staging
62 };
63
65 "Bound geometry node '{}' ({} vertices, {} bytes, stride: {})",
66 name, node->get_vertex_count(), vertex_data_size, node->get_vertex_stride());
67}
#define MF_WARN(comp, ctx,...)
#define MF_DEBUG(comp, ctx,...)
std::unordered_map< std::string, GeometryBinding > m_bindings
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.

References MayaFlux::Journal::BufferProcessing, MayaFlux::Journal::Buffers, MayaFlux::Buffers::create_staging_buffer(), m_bindings, MF_DEBUG, MF_WARN, and MayaFlux::Buffers::GeometryBindingsProcessor::GeometryBinding::node.

+ Here is the call graph for this function: