Lumiera  0.pre.03
»edit your freedom«
Dispatcher::PipelineBuilder< SRC > Struct Template Reference

#include "steam/engine/dispatcher.hpp"

Description

template<class SRC>
struct steam::engine::Dispatcher::PipelineBuilder< SRC >

A Builder wrapper, allowing to build a Job-planning pipeline step by step, while supplying contextual information from the CalcStream.

Remarks
This builder is created from Dispatcher::forCalcStream, and thus internally wired back to the Dispatcher implementation, to access the Fixture and low-level-Model data-structures to back generated render Jobs. Client code is expected to invoke all builder functions consecutively, and then place the result into the CalcStream for generating render Jobs.

Definition at line 97 of file dispatcher.hpp.

Public Member Functions

auto expandPrerequisites ()
 Builder: cause a exhaustive depth-first search to recursively discover all prerequisites of each top-level JobTicket.
 
auto feedTo (play::DataSink &sink)
 Terminal builder: setup processing feed to the given DataSink. More...
 
auto pullFrom (mobject::ModelPort port)
 Builder: connect to the JobTicket defining the actual processing for the nominal time of this frame and the given ModelPort.
 
auto timeRange (Time start, Time after)
 Builder: start frame sequence.
 

Protected Member Functions

template<class PIP >
PipelineBuilder< PIP > buildPipeline (PIP &&treeExplorer)
 
template<class PIP >
PlanningPipeline< PIP > terminatePipeline (PIP &&pipelineIterator)
 

Member Function Documentation

◆ feedTo()

auto feedTo ( play::DataSink sink)
inline

Terminal builder: setup processing feed to the given DataSink.

Returns
Iterator to pull a sequence of render jobs, ready for processing
Todo:
6/2023 more akin to a place holder, since it is not clear what must be done with the sink handle(s). Moreover, a Transformer returning a reference to the JobPlanning (deeper down in the pipeline) causes yet another unnecessary indirection; if the Transformer wasn't there, the resulting iterator would directly expose the result of the expander, which is the actual JobPlanning (but then we'd need another way how to wire in the DataSink...)

Definition at line 276 of file dispatcher.hpp.

◆ buildPipeline()

PipelineBuilder<PIP> buildPipeline ( PIP &&  treeExplorer)
inlineprotected

type rebinding helper to move the given tree-Explorer pipeline and layer a new PipelineBuilder subclass on top.

Note
IterExplorer itself is defined in a way to always strip away any existing top-level IterExplorer, then add a new processing layer and finally place a new IterExplorer layer on top. Taken together, this setup will slice away the actual PipelineBuilder layer, move the resulting pipeline into the next building step and finally produce a cleanly linked processing pipeline without any interspersed builders. Yet still, partially constructed pipelines are valid iterators and can be unit tested in isolation.

Definition at line 302 of file dispatcher.hpp.

+ Inheritance diagram for Dispatcher::PipelineBuilder< SRC >:
+ Collaboration diagram for Dispatcher::PipelineBuilder< SRC >:

The documentation for this struct was generated from the following file: