LUMIERA.clone/src/steam/fixture/node-graph-attachment.hpp
Ichthyostega f3dcbfe8b9 pick up work after the LAC-26 Maynooth
...after having settled the problems related to buffer management
and the interplay between buffers and output sinks, the ''next goal''
is to drive ahead the integration between job planning and invocation...
2026-06-24 18:27:12 +02:00

92 lines
3.4 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
NODE-GRAPH-ATTACHMENT.hpp - Binding from a Fixture-Segment into the low-level-Model
Copyright (C)
2023, Hermann Vosseler <Ichthyostega@web.de>
  **Lumiera** is free software; you can redistribute it and/or modify it
  under the terms of the GNU General Public License as published by the
  Free Software Foundation; either version 2 of the License, or (at your
  option) any later version. See the file COPYING for further details.
*/
/** @file node-graph-attachment.hpp
** Link from the Fixture datastructure into the render node network.
** The Segmentation is a partitioning of the effective timeline into segments with
** uniform processing structure; however this structure itself is defined as a graph
** of [render nodes](\ref engine::ProcNode); any specifics and decisions how rendering
** actually happens are represented in the way some ModelPort is connected to the model,
** which is the purpose of this binding object, stored as part of each Segment.
**
** @todo 2023 WIP-WIP-WIP »Playback Vertical Slice« need at least a drafted model
*/
#ifndef STEAM_FIXTURE_NODE_GRAPH_ATTACHMENT_H
#define STEAM_FIXTURE_NODE_GRAPH_ATTACHMENT_H
#include "steam/engine/exit-node.hpp"
//#include "lib/time/timevalue.hpp"
#include "lib/util.hpp"
#include <utility>
namespace steam {
namespace fixture {
using engine::ExitNode;
using engine::ExitNodes;
/**
* Binding and access point from a given Segment to access the actual render nodes.
* For each ModelPort, we can expect to get an ExitNode (the number of ports is fixed
* for the complete Timeline). However, this ExitNode does not need to be active, since
* parts of the timeline can be empty, or partially empty for some ModelPort.
* @warning while this descriptor object is freely copyable, the referred ExitNode(s) are
* move-only, and will be referred by the JobTicket. Thus a Segment in the Fixture
* must remain fixed in memory as long as any derived render jobs are alive.
*
* @todo WIP-WIP as of 4/2023 -- starting with a fake implementation /////////////////////TICKET #1306 : create an actual link to the low-level Model
* @deprecated 2025 now it looks like this entity was just a step stone towards the actual design;
* during the first prototypical implementation it became clear that the concept of an
* »ExitNode« needs to be repurposed (and shifted by one level in the architecture).
* However -- it is not clear yet in which way to address/designate the actual node
* that shall be pulled from a given render job; there might be some mapping based
* on a _feed ID_ (or a process-ID).
*/
class NodeGraphAttachment
{
ExitNodes exitNodes_;
public:
NodeGraphAttachment()
: exitNodes_{}
{ }
NodeGraphAttachment (ExitNodes&& exitNodes)
: exitNodes_{std::move (exitNodes)}
{ }
// default copy acceptable
ExitNode const&
operator[] (size_t idx) const
{
return idx < exitNodes_.size()? exitNodes_[idx]
: ExitNode::NIL;
}
bool
empty() const
{
return util::isnil (exitNodes_);
}
};
}} // namespace steam::fixture
#endif /*STEAM_FIXTURE_NODE_GRAPH_ATTACHMENT_H*/