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

◆ add_node()

void MayaFlux::Buffers::AggregateBindingsProcessor::add_node ( const std::string &  aggregate_name,
const std::shared_ptr< Nodes::Node > &  node,
const std::shared_ptr< VKBuffer > &  target,
ProcessingMode  mode = ProcessingMode::INTERNAL 
)

Add a node to a named aggregate.

Parameters
aggregate_nameName of the aggregate group
nodeNode to add
targetTarget buffer for this aggregate
modeProcessing mode for this aggregate (default: INTERNAL)

Nodes with the same aggregate_name are grouped together and uploaded to the same target buffer. Nodes are ordered by insertion.

Definition at line 9 of file AggregateBindingsProcessor.cpp.

14{
15 if (!node) {
17 "Attempted to add null node to aggregate '{}'", aggregate_name);
18 return;
19 }
20
21 if (!target) {
22 error<std::invalid_argument>(
25 std::source_location::current(),
26 "Cannot add node to aggregate '{}' with null target buffer", aggregate_name);
27 }
28
29 auto& aggregate = m_aggregates[aggregate_name];
30
31 if (aggregate.nodes.empty()) {
32 aggregate.target_buffer = target;
33 aggregate.processing_mode.store(mode, std::memory_order_release);
34 } else if (aggregate.target_buffer != target) {
36 "Aggregate '{}' already has a different target buffer. Ignoring new target.",
37 aggregate_name);
38 }
39
40 aggregate.nodes.push_back(node);
41 aggregate.staging_data.resize(aggregate.nodes.size());
42
43 size_t required_size = aggregate.nodes.size() * sizeof(float);
44 if (aggregate.target_buffer->get_size_bytes() < required_size) {
46 "Target buffer for aggregate '{}' may be too small: {} nodes require {} bytes, buffer has {} bytes",
47 aggregate_name, aggregate.nodes.size(), required_size,
48 aggregate.target_buffer->get_size_bytes());
49 }
50
52 "Added node to aggregate '{}' (total: {})", aggregate_name, aggregate.nodes.size());
53}
#define MF_WARN(comp, ctx,...)
#define MF_DEBUG(comp, ctx,...)
std::unordered_map< std::string, AggregateBinding > m_aggregates
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Buffers
Buffers, Managers, processors and processing chains.

References MayaFlux::Journal::BufferProcessing, MayaFlux::Journal::Buffers, m_aggregates, MF_DEBUG, and MF_WARN.