MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
OperatorChain.cpp
Go to the documentation of this file.
1#include "OperatorChain.hpp"
2
4
6
8
9void OperatorChain::add(std::shared_ptr<NetworkOperator> op)
10{
11 if (!op) {
13 "OperatorChain::add: null operator ignored");
14 return;
15 }
16 m_operators.push_back(std::move(op));
17}
18
19void OperatorChain::remove(const std::shared_ptr<NetworkOperator>& op)
20{
21 auto it = std::ranges::find(m_operators, op);
22 if (it != m_operators.end())
23 m_operators.erase(it);
24}
25
27{
28 m_operators.clear();
29}
30
31void OperatorChain::process(float dt, const NetworkOperator* upstream)
32{
33 const NetworkOperator* last = upstream;
34 for (const auto& op : m_operators) {
35 if (auto* gfx = dynamic_cast<GraphicsOperator*>(op.get())) {
36 if (gfx->consumes_upstream()) {
37 gfx->seed_from_upstream(
38 dynamic_cast<const GraphicsOperator*>(last));
39 }
40 }
41 op->process(dt);
42 last = op.get();
43 }
44}
45
46std::shared_ptr<NetworkOperator> OperatorChain::get(size_t index) const
47{
48 if (index >= m_operators.size())
49 return nullptr;
50 return m_operators[index];
51}
52
53} // namespace MayaFlux::Nodes::Network
#define MF_ERROR(comp, ctx,...)
Operator that produces GPU-renderable geometry.
virtual void process(float dt)=0
Process for one batch cycle.
Domain-agnostic interpretive lens for network processing.
std::vector< std::shared_ptr< NetworkOperator > > m_operators
void clear()
Remove all operators from the chain.
void remove(const std::shared_ptr< NetworkOperator > &op)
Remove a specific operator by pointer identity.
void process(float dt, const NetworkOperator *upstream=nullptr)
Call process(dt) on each operator in insertion order.
std::shared_ptr< NetworkOperator > get(size_t index) const
Return the operator at the given index, or nullptr if out of range.
void add(std::shared_ptr< NetworkOperator > op)
Append an already-constructed operator to the chain.
@ Init
Engine/subsystem initialization.
@ Nodes
DSP Generator and Filter Nodes, graph pipeline, node management.