![]() |
Lumiera 0.pre.04~rc.1
»edit your freedom«
|
Adapter to connect parameters and data buffers to an external processing function. More...
Go to the source code of this file.
Adapter to connect parameters and data buffers to an external processing function.
The Lumiera Render Engine relies on a »working substrate« of Render Nodes, interconnected in accordance to the structure of foreseeable computations. Yet the actual media processing functionality is provided by external libraries — while the engine is arranged in a way to remain agnostic regarding any details of actual computation. Those external libraries are attached into the system by means of a library plugin, which cares to translate the external capabilities into a representation as Processing Assets. These can be picked up and used in the Session, and will eventually be visited by the Builder as part of the effort to establish the aforementioned »network of Render Nodes.« At this point, external functionality must actually be connected to internal structures: this purpose is served by the FeedManifold.
This amounts to an two-stage adaptation process. Firstly, the plug-in for an external library has to wrap-up and package the library functions into an invocation functor — which thereby creates a low-level Specification of the functionality to invoke. This functor is picked up and stored as a prototype within the associated render node. More specifically, each node can offer several ports for computation. This interface is typically implemented by a Turnout, which in turn is based on some »weaving pattern« performed around and on top of a FeedManifold instance, which is created anew on the stack for each invocation. This invocation scheme implies that the FeedManifold is tailored specifically for a given functor, matching the expectations indicated by the invocation functor's signature:
BuffTable, which however provided additional buffer-management capabilities. This name describes well the basic functionality, which can be hard to see with all the additional meta-programming related to the flexible functor signature. When it comes to actual invocation, we collect input buffers from predecessor nodes and we prepare output buffers, and then we pass both to a processing function. Definition in file feed-manifold.hpp.
#include "lib/error.hpp"#include "lib/nocopy.hpp"#include "steam/engine/buffhandle.hpp"#include "lib/uninitialised-storage.hpp"#include "lib/meta/function.hpp"#include "lib/meta/trait.hpp"#include "lib/meta/typeseq-util.hpp"#include "lib/meta/variadic-helper.hpp"#include "lib/meta/tuple-helper.hpp"#include "lib/meta/generator.hpp"#include "lib/test/test-helper.hpp"Namespaces | |
| namespace | steam |
| Steam-Layer implementation namespace root. | |
| namespace | steam::engine |
| Lumiera's render engine core and operational control. | |
| namespace | steam::engine::anonymous_namespace{feed-manifold.hpp} |
Classes | |
| struct | is_Value< V > |
| struct | is_Buffer< B > |
| struct | _ProcFun< FUN > |
| Trait template to analyse and adapt to the given processing function. More... | |
| struct | _ProcFun< FUN >::_Case< SIG, SEL > |
| Detect use-case as indicated by the function signature. More... | |
| struct | _ProcFun< FUN >::_Case< SIG, enable_if< is_UnaryFun< SIG > > > |
| struct | _ProcFun< FUN >::_Case< SIG, enable_if< is_BinaryFun< SIG > > > |
| struct | _ProcFun< FUN >::_Case< SIG, enable_if< is_TernaryFun< SIG > > > |
| struct | _ParamFun< FUN > |
| Trait template to handle an associated parameter functor. More... | |
| struct | _Disabled |
| a function of total void More... | |
| struct | _StorageSetup< FUN > |
| Configuration context for a FeedManifold. More... | |
| struct | _StorageSetup< FUN >::ParamStorage |
| FeedManifold building block: hold parameter data. More... | |
| struct | _StorageSetup< FUN >::BufferSlot_Input |
| FeedManifold building block: hold input buffer pointers. More... | |
| struct | _StorageSetup< FUN >::BufferSlot_Output |
| FeedManifold building block: hold output buffer pointers. More... | |
| struct | _StorageSetup< FUN >::Storage |
| Data Storage block for the FeedManifold Flexibly configured based on the processing function. More... | |
| struct | FeedManifold< FUN > |
| Adapter to connect input/output buffers to a processing functor backed by an external library. More... | |
| class | FeedPrototype< FUN, PAM > |
| Builder-Prototype to create FeedManifold instances. More... | |
| struct steam::engine::anonymous_namespace{feed-manifold.hpp}::_ProcFun::_Case |
Collaboration diagram for _ProcFun< FUN >::_Case< SIG, SEL >: