Lumiera
0.pre.03
»edit your freedom«
|
Go to the source code of this file.
Specialised shorthand notation for building the Render Node network.
During the Builder run, the render nodes network will be constructed by gradually refining the connectivity structure derived from interpreting the »high-level model« from the current Session. At some point, it is essentially clear what data streams must be produced and what media processing functionality from external libraries will be utilised to achieve this goal. This is when the fluent builder notation defined in this header comes into play, allowing to package the fine grained and in part quite confusing details of parameter wiring and invocation preparation into some goal oriented building blocks, that can be combined and directed with greater clarity by the control structure to govern the build process.
The actual node connectivity is established by a process of gradual refinement, operating over several levels of abstraction. Each of these levels uses its associated builder and descriptor records to collect information, which is then emitted by a terminal invocation to produce the result; the higher levels thereby rely on the lower levels to fill in and elaborate the details.
Since the low-level-Model is a massive data structure comprising thousands of nodes, each with specialised parametrisation for some media handling library, and a lot of cross-linking pointers, it is important to care for efficient usage of memory with good locality. Furthermore, the higher levels of the build process will generate additional temporary data structures, refined gradually until the actual render node network can be emitted. Each builder level can thus be outfitted with a custom allocator — typically an instance of lib::AllocationCluster. Notably the higher levels can be attached to a separate AllocationCluster instance, which will be discarded once the build process is complete, while Level-2 (and below) uses the allocator for the actual target data structure, which has to be retained while the render graph is used; more specifically until a complete segment of the timeline is superseded and has been re-built.
.withAllocator<ALO> (args...)
Definition in file node-builder.hpp.
#include "lib/error.hpp"
#include "lib/nocopy.hpp"
#include "steam/engine/weaving-pattern-builder.hpp"
#include "steam/engine/proc-node.hpp"
#include "steam/engine/turnout.hpp"
#include "lib/several-builder.hpp"
#include "lib/format-string.hpp"
#include "lib/index-iter.hpp"
#include "lib/test/test-helper.hpp"
#include <utility>
#include <vector>
Classes | |
class | LinkBuilder |
class | NodeBuilder< POL, DAT > |
class | NodeBuilder< POL, DAT > |
class | PortBuilder< POL, DAT, WAB > |
class | PortBuilderRoot< POL, DAT > |
class | PortBuilderRoot< POL, DAT > |
class | ProcBuilder |
struct | UseHeapAlloc |
Typedefs | |
template<class POL , class I , class E = I> | |
using | DataBuilder = lib::SeveralBuilder< I, E, POL::template Policy > |
A builder to collect working data. More... | |
Functions | |
template<class POL , class D0 , uint siz, class BUILD > | |
NodeBuilder (NodeBuilder< POL, D0 > &&, SizMark< siz >, BUILD &&) -> NodeBuilder< POL, PatternData< D0, BUILD, siz >> | |
Deduction Guide: help the compiler with deducing follow-up NodeBuilder parameters. | |
auto | prepareNode (StrView nodeSymbol) |
Entrance point for building actual Render Node Connectivity (Level-2) More... | |
auto | retrieve (void *streamType) |
Entrance point for defining data flows and processing steps. | |
Namespaces | |
steam | |
Steam-Layer implementation namespace root. | |
steam::engine | |
Lumiera's render engine core and operational control. | |