Dispatcher-Pipeline: consider how to access render nodes from job

...this opens up yet another difficult question and a host of new problems
- how are prerequisites detected or arranged by the Builder
- how are prerequisites represented?
- what is an ExitNode in terms of implementation? A subclass of ProcNode?
- how will the actual implementation of JobTicket creation (on-demand) work?
- how to adapt the Mock implementation, while retaining the Specification
  for Segments and prerequisites?
This commit is contained in:
Fischlurch 2023-06-06 04:25:12 +02:00
parent 7d5c32e6b6
commit 3b2e5db7b4
10 changed files with 495 additions and 19 deletions

View file

@ -0,0 +1,74 @@
/*
EXIT-NODE.hpp - top-level node of the render network to pull generated media
Copyright (C) Lumiera.org
2023, Hermann Vosseler <Ichthyostega@web.de>
This program 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.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/** @file exit-node.hpp
** Effective top-level exit point to pull rendered data from the nodes network.
**
** @todo 6/2023 WIP-WIP used as placeholder; relation to ProcNode not yet determined /////////////TICKET #1306
** @see procnode.hpp
*/
#ifndef ENGINE_EXIT_NODE_H
#define ENGINE_EXIT_NODE_H
#include "lib/error.hpp"
#include "lib/nocopy.hpp"
#include "lib/hash-value.h"
#include <vector>
using lib::HashVal;
namespace steam {
namespace engine {
class ExitNode;
using ExitNodes = std::vector<engine::ExitNode>;
/**
* A top-level point in the render node network where data generation can be driven.
*
* @todo 6/2023 for the »Playback Vertical Slice« we need somehow to represent "the nodes",
* while the final solution how to hook up ProcNode and how to represent prerequisites
* remains still to be settled. So this is a placeholder to support mock testing for now.
*/
class ExitNode
: util::NonCopyable
{
HashVal pipelineIdentity_; //////////////////////////////////////////////////////////TICKET #1293 : Hash-Chaining for invocation-ID... derive from ProcNode wiring
ExitNodes prerequisites_; ///////////////////////////////////////////////////////////TICKET #1306 : actual access to low-level-Model (ProcNode)
public:
ExitNode()
: pipelineIdentity_{0}
, prerequisites_{}
{ }
static ExitNode NIL;
};
}} // namespace steam::engine
#endif /*ENGINE_EXIT_NODE_H*/

View file

@ -118,7 +118,7 @@ using lib::LUID;
Provision (JobFunctor& func, HashVal seed =0)
: jobFunctor{func}
, invocationSeed(static_cast<JobClosure&>(func).buildInstanceID(seed)) ////////////////TICKET #1287 : fix actual interface down to JobFunctor (after removing C structs)
{ }
{ } /////////////////TICKET #1293 : Hash-Chaining for invocation-ID... size_t hash? or a LUID?
};

View file

@ -29,6 +29,7 @@
*/
#include "steam/engine/exit-node.hpp"
#include "steam/engine/nodefactory.hpp"
#include "steam/mobject/session/effect.hpp"
#include "lib/allocation-cluster.hpp"
@ -38,6 +39,10 @@
namespace steam {
namespace engine {
/// storage for the »inactive« ExitNode marker
ExitNode ExitNode::NIL{};
namespace { // Details of node fabrication
////////////////////////////////////////////////TODO: still needed?

View file

@ -0,0 +1,77 @@
/*
NODE-GRAPH-ATTACHMENT.hpp - Binding from a Fixture-Segment into the low-level-Model
Copyright (C) Lumiera.org
2023, Hermann Vosseler <Ichthyostega@web.de>
This program 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.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/** @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 <utility>
namespace steam {
namespace fixture {
using ExitNodes = 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.
*
* @todo WIP-WIP as of 4/2023 -- starting with a fake implementation /////////////////////TICKET #1306 : create an actual link to the low-level Model
*/
class NodeGraphAttachment
{
ExitNodes exitNodes_;
public:
NodeGraphAttachment()
: exitNodes_{}
{ }
NodeGraphAttachment (ExitNodes&& exitNodes)
: exitNodes_{std::move (exitNodes)}
{ }
// default copy acceptable
};
}} // namespace steam::fixture
#endif /*STEAM_FIXTURE_NODE_GRAPH_ATTACHMENT_H*/

View file

@ -31,14 +31,14 @@
#ifndef STEAM_FIXTURE_SEGMENT_H
#define STEAM_FIXTURE_SEGMENT_H
#include <list>
#include "steam/common.hpp"
#include "steam/mobject/explicitplacement.hpp"
#include "steam/engine/job-ticket.hpp"
#include "lib/time/timevalue.hpp"
using std::list;
#include <list>
namespace steam {
namespace fixture {
@ -46,6 +46,7 @@ namespace fixture {
using mobject::ExplicitPlacement;
using lib::time::TimeSpan;
using lib::time::Time;
using std::list;
/**
* For the purpose of building and rendering, the fixture (for each timeline)

View file

@ -245,7 +245,7 @@ namespace engine {
virtual JobKind getJobKind() const =0;
virtual bool verify (Time, InvocationInstanceID) const =0;
virtual HashVal hashOfInstance(InvocationInstanceID) const =0;
virtual InvocationInstanceID buildInstanceID(HashVal)const =0;
virtual InvocationInstanceID buildInstanceID(HashVal)const =0; ////////////////////////////TICKET #1293 : a size_t hash? or a LUID?
lib::HashVal hash_value (JobParameter) const;
};

View file

@ -199,12 +199,12 @@ namespace test {
.pullFrom (port);
CHECK (not isnil (pipeline));
CHECK (nullptr == pipeline->first);
CHECK (nullptr == pipeline->first); // is a top-level ticket
JobTicket const& ticket = *pipeline->second;
FrameCoord dummy;
Job job = ticket.createJobFor(dummy);
CHECK (MockJobTicket::isAssociated (job, ticket));
CHECK (dispatcher.verify(job, port, sink));
}

View file

@ -316,6 +316,14 @@ namespace test {
{
return dummySetup_.getModelPort (index);
}
/**
* Test support: verify the given Job is consistent with this Dispatcher.
*/
bool verify(Job const& job, ModelPort const& port, play::DataSink const& sink)
{
UNIMPLEMENTED ("verify the job was plausibly created from this dispatcher");
}
};
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1221

View file

@ -38,8 +38,6 @@
#include "lib/util.hpp"
using lib::HashIndexed;
namespace steam {
namespace mobject {

View file

@ -70068,7 +70068,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1681742255171" ID="ID_1531898349" MODIFIED="1681744077783" TEXT="Draft im Test-Setup">
<icon BUILTIN="pencil"/>
<node COLOR="#435e98" CREATED="1681742836996" FOLDED="true" ID="ID_1978512771" MODIFIED="1684889637419" TEXT="scaffolding and mocking used for this test">
<node COLOR="#435e98" CREATED="1681742836996" FOLDED="true" ID="ID_1978512771" MODIFIED="1685987633447" TEXT="scaffolding and mocking used for this test">
<icon BUILTIN="full-1"/>
<node CREATED="1681742863121" ID="ID_101929835" MODIFIED="1684878277170" TEXT="ben&#xf6;tigte Mocks">
<icon BUILTIN="info"/>
@ -70261,7 +70261,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1682384701245" ID="ID_621302512" MODIFIED="1682384816595" TEXT="nested Records f&#xfc;r Prerequisites">
<node CREATED="1682385047640" ID="ID_1371682614" MODIFIED="1682385052546" TEXT="sie liegen im Scope"/>
<node CREATED="1682385053111" ID="ID_285349039" MODIFIED="1682385061769" TEXT="Reihenfolge ist zu erhalten"/>
<node CREATED="1682385069872" ID="ID_1300373934" MODIFIED="1682385080052" TEXT="dabei aber noch sortiert nach Channel"/>
<node COLOR="#5b280f" CREATED="1682385069872" ID="ID_1300373934" MODIFIED="1685987819535" TEXT="dabei aber noch sortiert nach Channel">
<icon BUILTIN="button_cancel"/>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1682384817342" ID="ID_1041945883" MODIFIED="1683809828917" TEXT="Channel-Zuordnung nur per Filter/Marker">
<richcontent TYPE="NOTE"><html>
@ -70275,7 +70277,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</body>
</html></richcontent>
<icon BUILTIN="hourglass"/>
<node COLOR="#435e98" CREATED="1683809711717" ID="ID_1916276594" LINK="#ID_1346581014" MODIFIED="1683809780483" TEXT="Channel sind tats&#xe4;chlich OutputSlots">
<node COLOR="#435e98" CREATED="1683809711717" ID="ID_1916276594" LINK="#ID_1346581014" MODIFIED="1685987685173" TEXT="Channel sind tats&#xe4;chlich ModelPorts">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1683809741762" ID="ID_610603117" MODIFIED="1683809760081" TEXT="daher wandern sie vom JobTicket in das Segment">
@ -70285,6 +70287,30 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="bell"/>
</node>
</node>
<node CREATED="1685987717673" ID="ID_1636681352" MODIFIED="1685987743599" TEXT="Umgang mit ModelPorts">
<node CREATED="1685987749304" ID="ID_771112192" MODIFIED="1685987767020" TEXT="das Haupt-Ticket ist f&#xfc;r jeden ModelPort stets vorhanden"/>
<node CREATED="1685987950917" ID="ID_1508383680" MODIFIED="1685988010119" TEXT="Prerequisites standardm&#xe4;&#xdf;ig auch aufdoppeln">
<linktarget COLOR="#473c5f" DESTINATION="ID_1508383680" ENDARROW="Default" ENDINCLINATION="210;13;" ID="Arrow_ID_167679696" SOURCE="ID_1014305317" STARTARROW="None" STARTINCLINATION="558;-28;"/>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1685987970674" ID="ID_430182913" MODIFIED="1685990226060" TEXT="aber Filter-M&#xf6;glichkeit vorsehen">
<icon BUILTIN="hourglass"/>
<node CREATED="1685990229531" ID="ID_865677439" MODIFIED="1685990235582" TEXT="YAGNI">
<icon BUILTIN="yes"/>
</node>
<node CREATED="1685990238496" ID="ID_262692344" LINK="#ID_829030768" MODIFIED="1685990356186" TEXT="Thema erst mal ignorieren">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
auch wenn es irre scheint, sehr wahrscheinlich werde ich den ganzen Scheduler entwickeln k&#246;nnen, ohne jemals ein reales low-level-Model anzufassen; daher ist die Port-Nummer wahrscheinlich v&#246;llig egal, und es gn&#252;gt, lediglich die APIs entsprechend zu erweitern...
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1681833071385" FOLDED="true" ID="ID_1107925235" MODIFIED="1684816361001" TEXT="MockJob hinterlegen">
@ -74026,11 +74052,129 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685979157473" ID="ID_1156902335" MODIFIED="1685979175008" TEXT="allgemein (Plan f&#xfc;r operative L&#xf6;sung)">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1685986615408" ID="ID_114144357" MODIFIED="1685986639127" TEXT="JobTickets werden on-demand erzeugt"/>
<node CREATED="1685986639787" ID="ID_966871848" MODIFIED="1685986640616" TEXT="aber in der Segment-Storage (AllocationCluster)"/>
<node CREATED="1685986728208" ID="ID_720100639" MODIFIED="1685986736792" TEXT="also: Array-Access mit NULL-Check"/>
<node CREATED="1685999762297" ID="ID_551644524" MODIFIED="1686000423984" TEXT="es gibt ein Koppel-Objekt zum low-level-Model">
<arrowlink COLOR="#656486" DESTINATION="ID_826544806" ENDARROW="Default" ENDINCLINATION="469;-18;" ID="Arrow_ID_1372033454" STARTARROW="None" STARTINCLINATION="486;32;"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686014265346" ID="ID_1087682281" MODIFIED="1686014444967" TEXT="Diskrepanz zwischen ModelPort und PortNr">
<arrowlink COLOR="#945b74" DESTINATION="ID_1552872944" ENDARROW="Default" ENDINCLINATION="-661;-43;" ID="Arrow_ID_1211078783" STARTARROW="None" STARTINCLINATION="-496;30;"/>
<linktarget COLOR="#fe3f50" DESTINATION="ID_1087682281" ENDARROW="Default" ENDINCLINATION="326;21;" ID="Arrow_ID_676319361" SOURCE="ID_252150549" STARTARROW="None" STARTINCLINATION="309;-20;"/>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685979177023" ID="ID_886135870" MODIFIED="1685979181526" TEXT="Mock-L&#xf6;sung">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685979197228" ID="ID_545092486" MODIFIED="1685979201501" TEXT="Thema: ModelPort">
<arrowlink COLOR="#6290c0" DESTINATION="ID_377967489" ENDARROW="Default" ENDINCLINATION="1458;-612;" ID="Arrow_ID_1683217879" STARTARROW="None" STARTINCLINATION="36;5;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1685986752098" ID="ID_225154274" MODIFIED="1685986765295" TEXT="erst der konkrete JobFunktor mu&#xdf; die ExitNode aufl&#xf6;sen"/>
<node CREATED="1685987227501" ID="ID_1649977820" MODIFIED="1685987251374" TEXT="daf&#xfc;r gen&#xfc;gt ihm eine Index-Nr als Parameter">
<icon BUILTIN="stop-sign"/>
</node>
<node CREATED="1685986766172" HGAP="28" ID="ID_491497133" MODIFIED="1685987523448" TEXT="Nein! besser direkt als Pointer durchschieben" VSHIFT="-5">
<arrowlink COLOR="#3e3f9b" DESTINATION="ID_666925478" ENDARROW="Default" ENDINCLINATION="426;-58;" ID="Arrow_ID_1306644139" STARTARROW="None" STARTINCLINATION="311;19;"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685987502422" ID="ID_1001471344" MODIFIED="1685987518607" TEXT="Segmentation-Spec erweitern">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1685987531259" ID="ID_1014305317" MODIFIED="1685988022566" TEXT="minimal halten! f&#xfc;r Tests ist die ExitNode schei&#xdf;egal">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
ich gehe davon aus, da&#223; praktisch alle Tests, die dieses Mock-Framework verwenden, lediglich pr&#252;fen da&#223; eine gewisse Connection durchgereicht wurde
</p>
</body>
</html></richcontent>
<arrowlink COLOR="#473c5f" DESTINATION="ID_1508383680" ENDARROW="Default" ENDINCLINATION="210;13;" ID="Arrow_ID_167679696" STARTARROW="None" STARTINCLINATION="558;-28;"/>
<icon BUILTIN="yes"/>
</node>
<node COLOR="#5b280f" CREATED="1685988037609" ID="ID_1118666398" MODIFIED="1686009850660" TEXT="nun stets eager alle m&#xf6;glichen Duplikate (pro ModelPort) generieren">
<icon BUILTIN="button_cancel"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1686009860309" ID="ID_1088673306" MODIFIED="1686009875811" TEXT="Hexagonale Kacke!">
<icon BUILTIN="flag-pink"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1686009877359" ID="ID_224370768" MODIFIED="1686009907838" TEXT="mu&#xdf; ich jetzt schon wieder die JobTicket-Erzeugung umprogrammieren??">
<icon BUILTIN="smiley-angry"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686009918647" ID="ID_1552363345" MODIFIED="1686009941452" TEXT="und stattdessen die Prerequisites-Struktur in Form von Exit-Nodes aufbauen...">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1686011373412" ID="ID_1341039933" MODIFIED="1686011421307" TEXT="Problem: das w&#xe4;re dann ja der echte JobTicket-ctor (nicht MockJobTicket)">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1686011430516" ID="ID_373808709" MODIFIED="1686011467978" TEXT="damit m&#xfc;&#xdf;te ich jetzt die Spec-Erzeugung ein zweites Mal programmieren"/>
<node CREATED="1686011478528" ID="ID_1762441208" MODIFIED="1686011502058" TEXT="und obendrein ein drittes Mal f&#xfc;r die Fake-ExitNode"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685988083711" ID="ID_1973560674" MODIFIED="1685988105725" TEXT="Prerequisites von der Wurzel aus optional nach ModelPort-Nr filtern">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685989418199" ID="ID_1214082390" MODIFIED="1685989432582" TEXT="Mock-Repr&#xe4;sentation f&#xfc;r Exit-Node bereitstellen">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1685989458554" ID="ID_577122835" MODIFIED="1685989469824" TEXT="diese kann sich im Lauf der Zeit noch &#xe4;ndern">
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685989471022" ID="ID_1045668645" MODIFIED="1685989599678" TEXT="erst einmal gen&#xfc;gt es, da&#xdf; jedes gemockte Segment da einen Eintrag hat">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...auf <i>irgend ein</i>&#160;Objekt...
</p>
<p>
Allerdings &#8212; da die Segmente vermutlich nicht gemockt werden (sondern nur die Segmentation), mu&#223; ich mich da schon um eine Allokation f&#252;r ein Dummy-Objekt k&#252;mmern
</p>
</body>
</html></richcontent>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685988152809" ID="ID_255556137" MODIFIED="1685988181493" TEXT="API erweitern : portNum">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1685990098487" ID="ID_829030768" MODIFIED="1685990110152" TEXT="grunds&#xe4;tzlich: YAGNI">
<icon BUILTIN="yes"/>
<node CREATED="1685990112190" ID="ID_463883334" MODIFIED="1685990125693" TEXT="blo&#xdf; nicht verr&#xfc;ckt machen mit dem konkreten Model"/>
<node CREATED="1685990126424" ID="ID_933157694" MODIFIED="1685990149034" TEXT="sehr wahrscheinlich werden die Mocks niemals ein differenziertes Model bespielen"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685990173459" ID="ID_920554071" MODIFIED="1686000314740" TEXT="im Segment einen indizierten Zugriff vorsehen">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686000316132" ID="ID_826544806" LINK="#ID_1237481687" MODIFIED="1686000406522" TEXT="Kopplung per &#xbb;NodeGraphAttachment&#xab;">
<linktarget COLOR="#656486" DESTINATION="ID_826544806" ENDARROW="Default" ENDINCLINATION="469;-18;" ID="Arrow_ID_1372033454" SOURCE="ID_551644524" STARTARROW="None" STARTINCLINATION="486;32;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686008339600" HGAP="28" ID="ID_181839329" MODIFIED="1686008351273" TEXT="Dummy-Implementierung anlegen" VSHIFT="13">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686008354738" ID="ID_1875142825" MODIFIED="1686008361709" TEXT="ExitNode : Platzhalter">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686008421806" ID="ID_14455291" MODIFIED="1686008427283" TEXT="ExitNode::NIL">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686008437892" ID="ID_665376680" MODIFIED="1686008449710" TEXT="weitere rekursiv f&#xfc;r die &#xbb;Prerequisites&#xab;">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1686009434197" ID="ID_1874481686" MODIFIED="1686009466526" TEXT="mu&#xdf; nun Segment / JobTicket-Erzeugung umstellen">
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1686014291202" ID="ID_252150549" MODIFIED="1686014413608" TEXT="Problem: wie kommt man an die portNum?">
<arrowlink COLOR="#fe3f50" DESTINATION="ID_1087682281" ENDARROW="Default" ENDINCLINATION="326;21;" ID="Arrow_ID_676319361" STARTARROW="None" STARTINCLINATION="309;-20;"/>
<icon BUILTIN="help"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686017516585" ID="ID_1223330547" MODIFIED="1686017537173" TEXT="brauche &#xdc;bersetzung per Map">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686017538602" ID="ID_1818653429" MODIFIED="1686017552163" TEXT="pr&#xfc;fen: in der Segmentation implementieren">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
</node>
@ -74068,7 +74212,6 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="yes"/>
</node>
<node COLOR="#5b280f" CREATED="1685803612926" ID="ID_755957373" MODIFIED="1685925050534" TEXT="damit k&#xf6;nnte man nebenbei das Problem der Output-Sink-Steuerung l&#xf6;sen">
<arrowlink COLOR="#5f3daf" DESTINATION="ID_87044302" ENDARROW="Default" ENDINCLINATION="265;-32;" ID="Arrow_ID_1548054846" STARTARROW="None" STARTINCLINATION="-44;200;"/>
<icon BUILTIN="button_cancel"/>
<node CREATED="1685840292823" ID="ID_1498997864" MODIFIED="1685840301432" TEXT="zweifelhafte Idee">
<icon BUILTIN="smiley-neutral"/>
@ -74133,6 +74276,16 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742836996" ID="ID_1332543018" MODIFIED="1684878204163" TEXT="integration: generate a complete sequence of (dummy)Jobs">
<arrowlink COLOR="#4d3a6e" DESTINATION="ID_92268538" ENDARROW="Default" ENDINCLINATION="184;0;" ID="Arrow_ID_1841184971" STARTARROW="None" STARTINCLINATION="146;7;"/>
<icon BUILTIN="full-5"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685986952878" ID="ID_819115625" MODIFIED="1685986964431" TEXT="Umgang mit der DataSink">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1685986971920" ID="ID_1354248617" MODIFIED="1685987005822" TEXT="vorsicht ref-counting &#x27f9; darf nicht in den Job-Parameter">
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685987007275" ID="ID_953619048" MODIFIED="1685987465547" TEXT="daher per Pointer auf den Calc-Stream verweisen">
<arrowlink COLOR="#4b3ea5" DESTINATION="ID_87044302" ENDARROW="Default" ENDINCLINATION="248;-35;" ID="Arrow_ID_594271482" STARTARROW="None" STARTINCLINATION="669;36;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742264338" ID="ID_627755845" MODIFIED="1681742273104" TEXT="in RenderDrive &#xfc;berf&#xfc;hren">
@ -74267,7 +74420,11 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685802725228" ID="ID_848236204" MODIFIED="1685802740418" TEXT="Parameter-Paket">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685802741818" ID="ID_87044302" MODIFIED="1685803707711" TEXT="DataSink(Handle)">
<linktarget COLOR="#5f3daf" DESTINATION="ID_87044302" ENDARROW="Default" ENDINCLINATION="265;-32;" ID="Arrow_ID_1548054846" SOURCE="ID_755957373" STARTARROW="None" STARTINCLINATION="-44;200;"/>
<linktarget COLOR="#4b3ea5" DESTINATION="ID_87044302" ENDARROW="Default" ENDINCLINATION="248;-35;" ID="Arrow_ID_594271482" SOURCE="ID_953619048" STARTARROW="None" STARTINCLINATION="669;36;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685986803653" ID="ID_666925478" MODIFIED="1685987270290" TEXT="Exit-Node-Index-Nr">
<linktarget COLOR="#3e3f9b" DESTINATION="ID_666925478" ENDARROW="Default" ENDINCLINATION="426;-58;" ID="Arrow_ID_1306644139" SOURCE="ID_491497133" STARTARROW="None" STARTINCLINATION="311;19;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685802759365" ID="ID_377618445" MODIFIED="1685802764857" TEXT="InstanceID">
@ -74275,6 +74432,24 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1685802968612" ID="ID_733865950" MODIFIED="1685802988724" TEXT="Problem: Variabilit&#xe4;t erm&#xf6;glichen und steuern">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1685987182252" ID="ID_635328003" MODIFIED="1685987190819" TEXT="zun&#xe4;chst pragmatisch angehen">
<icon BUILTIN="yes"/>
</node>
<node CREATED="1685987314640" ID="ID_1818827605" MODIFIED="1685987329772" TEXT="zwei size_t-Parameter vorsehen">
<node CREATED="1685987350453" ID="ID_1727500517" MODIFIED="1685987360913" TEXT="&quot;srcArg&quot; und &quot;sinkArg&quot;"/>
<node CREATED="1685987363811" ID="ID_1364612519" MODIFIED="1685987421131" TEXT="der Funktor &#xfc;bersetzt die wieder in Pointer">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
das ist ad&#228;quat, da in diesem Bereich grunds&#228;tzlich nichts mehr gecheckt wird (das hat alles schon der Builder getan)
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
</node>
</node>
@ -74422,9 +74597,6 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="idea"/>
<node CREATED="1681167647585" ID="ID_1721954285" MODIFIED="1681167652349" TEXT="Prerequisite(s)"/>
<node CREATED="1681167653769" ID="ID_1301968397" MODIFIED="1681167655572" TEXT="Provision"/>
<node CREATED="1681167667360" ID="ID_1056088464" MODIFIED="1681167828900" TEXT="(nested) ExplorationState">
<arrowlink COLOR="#5c74b4" DESTINATION="ID_247185233" ENDARROW="Default" ENDINCLINATION="28;-86;" ID="Arrow_ID_1572923842" STARTARROW="None" STARTINCLINATION="-77;9;"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1682622153437" ID="ID_524720976" MODIFIED="1682622219250" TEXT="zu kl&#xe4;ren...">
@ -74459,7 +74631,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</body>
</html></richcontent>
</node>
<node CREATED="1682626596442" ID="ID_627099643" MODIFIED="1682626614602" TEXT="w&#xfc;rde darauf hinauslaufen, da&#xdf; man auf einem const JobTicket keine Planung machen kann"/>
<node CREATED="1682626596442" ID="ID_627099643" MODIFIED="1685982230662" TEXT="w&#xfc;rde darauf hinauslaufen, da&#xdf; JobTicket selber bei der Job-Planung nicht ver&#xe4;ndert wird"/>
<node CREATED="1682626675632" ID="ID_1360253646" MODIFIED="1682626692994" TEXT="Alternative: komplett eine Builder-Notation f&#xfc;r die Segmentation">
<icon BUILTIN="idea"/>
</node>
@ -74502,6 +74674,32 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#435e98" CREATED="1685984734260" ID="ID_218785465" MODIFIED="1685985016494" TEXT="Verh&#xe4;ltnis zum ModelPort?">
<icon BUILTIN="help"/>
<node CREATED="1685984745585" ID="ID_121976349" MODIFIED="1685984779760" TEXT="f&#xfc;r jede Timeline gibt es einen festen geordneten Satz an ModelPorts">
<icon BUILTIN="info"/>
</node>
<node CREATED="1685984786196" ID="ID_374911492" MODIFIED="1685984819701" TEXT="der ModelPort bestimmt, auf welche konkrete ExitNode letztlich zugegriffen wird"/>
<node CREATED="1685984821489" ID="ID_131703123" MODIFIED="1685984844982" TEXT="&#x27f9; in jedem Segment gibt es zu jedem ModelPort eine ExitNode"/>
<node COLOR="#5b280f" CREATED="1685984852892" ID="ID_1859218444" MODIFIED="1685984879809" TEXT="man k&#xf6;nnte nun aber die Nr der Exit-Node einfach durch das JobTicket durchreichen">
<icon BUILTIN="button_cancel"/>
<node CREATED="1685984881202" ID="ID_79372787" MODIFIED="1685984942175" TEXT="geht nicht so">
<icon BUILTIN="closed"/>
</node>
<node CREATED="1685984892770" ID="ID_1858620144" MODIFIED="1685984934826" TEXT="denn die Prerequisites h&#xe4;ngen vom konkreten Render-Node-Graph ab">
<icon BUILTIN="info"/>
</node>
<node CREATED="1685984914595" ID="ID_1013067366" MODIFIED="1685985083511" TEXT="und Prerequisites sind wieder JobTickets">
<arrowlink COLOR="#274b82" DESTINATION="ID_1941085260" ENDARROW="Default" ENDINCLINATION="43;-1;" ID="Arrow_ID_1201489072" STARTARROW="None" STARTINCLINATION="-109;7;"/>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1685984945792" ID="ID_1941085260" MODIFIED="1685985107798" TEXT="die Aufteilung nach ModelPort mu&#xdf; oberhalb der JobTickets erfolgen">
<arrowlink COLOR="#1d4574" DESTINATION="ID_377967489" ENDARROW="Default" ENDINCLINATION="-5;-27;" ID="Arrow_ID_265259078" STARTARROW="None" STARTINCLINATION="44;34;"/>
<linktarget COLOR="#274b82" DESTINATION="ID_1941085260" ENDARROW="Default" ENDINCLINATION="43;-1;" ID="Arrow_ID_1201489072" SOURCE="ID_1013067366" STARTARROW="None" STARTINCLINATION="-109;7;"/>
<icon BUILTIN="forward"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1684877569538" ID="ID_1875449471" MODIFIED="1684877576667" TEXT="Spezifikation schrittweise entwickeln">
<icon BUILTIN="pencil"/>
@ -74512,8 +74710,21 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1681864799687" ID="ID_750179276" MODIFIED="1681864834215" TEXT="Aufz&#xe4;hlung Prerequisites"/>
</node>
</node>
<node CREATED="1681167767260" ID="ID_247185233" MODIFIED="1681167820893" TEXT="JobTicket::ExplorationState">
<linktarget COLOR="#5c74b4" DESTINATION="ID_247185233" ENDARROW="Default" ENDINCLINATION="28;-86;" ID="Arrow_ID_1572923842" SOURCE="ID_1056088464" STARTARROW="None" STARTINCLINATION="-77;9;"/>
<node COLOR="#5b280f" CREATED="1681167767260" FOLDED="true" ID="ID_247185233" MODIFIED="1685982428864" TEXT="JobTicket::ExplorationState">
<icon BUILTIN="button_cancel"/>
<node CREATED="1685982376368" ID="ID_879209020" MODIFIED="1685982383683" TEXT="war eine Folge des Monaden-Ansatzes"/>
<node CREATED="1685982384265" ID="ID_1557604605" MODIFIED="1685982427088" TEXT="ersetzt druch einen TransformIterator">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...zur &#220;bersetzung der internen Strukturen im JobTicket in eine Folge verschachtelter Prerequisite-JobTicket
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
</node>
@ -74531,6 +74742,39 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1681742024628" ID="ID_1133872595" MODIFIED="1683765880297" TEXT="bis auf welchen Level wird differenziert?">
<linktarget COLOR="#b9234e" DESTINATION="ID_1133872595" ENDARROW="Default" ENDINCLINATION="78;-135;" ID="Arrow_ID_1952784533" SOURCE="ID_891227892" STARTARROW="Default" STARTINCLINATION="-66;89;"/>
<icon BUILTIN="help"/>
<node CREATED="1685985051895" ID="ID_377967489" MODIFIED="1685986596181" TEXT="ein JobTicket gilt jeweils nur f&#xfc;r eine ExitNode">
<linktarget COLOR="#1d4574" DESTINATION="ID_377967489" ENDARROW="Default" ENDINCLINATION="-5;-27;" ID="Arrow_ID_265259078" SOURCE="ID_1941085260" STARTARROW="None" STARTINCLINATION="44;34;"/>
<linktarget COLOR="#6290c0" DESTINATION="ID_377967489" ENDARROW="Default" ENDINCLINATION="1458;-612;" ID="Arrow_ID_1683217879" SOURCE="ID_545092486" STARTARROW="None" STARTINCLINATION="36;5;"/>
<icon BUILTIN="yes"/>
<node CREATED="1685985128633" ID="ID_1088306991" MODIFIED="1685985343741" TEXT="Knackpunkt sind die Prerequisites">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
denn diese w&#228;ren rekursiv wieder JobTickets; w&#252;rde man die Aufteilung nach ModelPort <i>in das JobTicket selber</i>&#160;hineinnehmen, dann w&#228;ren auch die Prerequisites wieder nach ModelPort untergliedert; das wiederspricht den Freiheitsgraden der Struktur (Prerequisites sind an die einzelne ExitNode gebunden)
</p>
</body>
</html></richcontent>
<icon BUILTIN="info"/>
</node>
<node CREATED="1685986378709" ID="ID_758202290" MODIFIED="1685986501318" TEXT="weiteres Argument: Storage">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Grunds&#228;tzlich ist es erst mal egal, man braucht eben einen Descriptor-Record pro Segment pro ModelPort. Da aber JobTickets on-demand erzeugt werden, wird der Aufwand hierf&#252;r verschoben in die Job-Planung (und findet gar nicht statt, solange eine bestimmte ExitNode konkret noch gar nicht bespielt wurde)
</p>
</body>
</html></richcontent>
<icon BUILTIN="yes"/>
</node>
<node CREATED="1685986221696" ID="ID_651519223" MODIFIED="1685986274220" TEXT="f&#xfc;r das JobTicket ist die ExitNode nur ein Functor-Parameter-Wert"/>
<node CREATED="1685986283724" ID="ID_1876084248" MODIFIED="1685986316444" TEXT="analog zum (aber separat) Invocation-Instance-Seed"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742053502" ID="ID_122410804" MODIFIED="1681742065769" TEXT="Idee: auch noch Channel aufl&#xf6;sen">
<linktarget COLOR="#daffc5" DESTINATION="ID_122410804" ENDARROW="Default" ENDINCLINATION="-352;-925;" ID="Arrow_ID_194808318" SOURCE="ID_804638831" STARTARROW="None" STARTINCLINATION="544;39;"/>
<icon BUILTIN="idea"/>
@ -74719,6 +74963,30 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686014326348" ID="ID_1552872944" MODIFIED="1686014444967" TEXT="Thema: Addressierung von ModelPorts">
<linktarget COLOR="#945b74" DESTINATION="ID_1552872944" ENDARROW="Default" ENDINCLINATION="-661;-43;" ID="Arrow_ID_1211078783" SOURCE="ID_1087682281" STARTARROW="None" STARTINCLINATION="-496;30;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1686017254862" ID="ID_1981217285" MODIFIED="1686017261083" TEXT="wo ist was sinnvoll?">
<icon BUILTIN="help"/>
<node CREATED="1686017262347" ID="ID_198460233" MODIFIED="1686017272718" TEXT="Addressierung als ID">
<node CREATED="1686017300862" ID="ID_764101202" MODIFIED="1686017313016" TEXT="die ID ist (wahrscheinlich) stabil"/>
</node>
<node CREATED="1686017273682" ID="ID_670985811" MODIFIED="1686017280610" TEXT="Addressierung per Index-Nr">
<node CREATED="1686017369441" ID="ID_49340826" MODIFIED="1686017384854" TEXT="&#xfc;berall in der Engine und im Job-Planning gen&#xfc;gt eine Slot-Nr"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686017387713" ID="ID_114295882" MODIFIED="1686017404291" TEXT="m&#xf6;gliche &#xdc;bersetzung">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1686017441247" ID="ID_1297182726" MODIFIED="1686017449146" TEXT="sinnvollerweise an einem Eingangs-Punkt">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686017478558" ID="ID_1523741879" MODIFIED="1686017490165" TEXT="naheliegend: die Segmentation">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686017451774" ID="ID_377104983" MODIFIED="1686017492895" TEXT="dort mu&#xdf; eine Map-Datenstruktur gepflegt werden">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742018442" ID="ID_596503548" MODIFIED="1681742022940" TEXT="Addressierung JobTicket">
<icon BUILTIN="flag-yellow"/>
@ -74735,6 +75003,51 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685999849385" ID="ID_1436753704" MODIFIED="1685999865729" TEXT="Anbindung Segment &#x27fc; Node-Graph">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685999881980" ID="ID_1237481687" MODIFIED="1685999917839" TEXT="Koppel-Facade: &#xbb;NodeGraphAttachment&#xab;">
<icon BUILTIN="flag-yellow"/>
</node>
<node CREATED="1685999923288" ID="ID_43857242" MODIFIED="1685999987298" TEXT="grunds&#xe4;tzlich">
<icon BUILTIN="yes"/>
<node CREATED="1686000020721" ID="ID_1371246719" MODIFIED="1686000111143" TEXT="Varianten werden explizit ausgefaltet">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
im low-level-Model selber gibt es keine Entscheidungslogik mehr; sofern es mehrere Auspr&#228;gungen oder Verzweigungen gibt, werden diese als Zweige im Modell explizit gemacht
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1685999948139" ID="ID_1191809084" MODIFIED="1686000234616" TEXT="konkrete Auspr&#xe4;gung im Node-Graph">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
die konkrete Auspr&#228;gung jedweder Eigenschaft findet im Node-Graph statt, nicht sonstwo in der Fixture. Beispielsweise ist im Node-Graph festgelegt, wo Caching stattfinden kann, oder welche Sub-Zweige als Prerequisites separat gescheduled werden. Die ExitNode aggregiert diese Informationen nur, und im JobTicket werden sie aufgeh&#228;ngt
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1685999962811" ID="ID_299964044" MODIFIED="1686000278191" TEXT="Anordnung derselben: per Ankopplung an die Fixture">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
sofern irgend eine Eigenschaft <i>renderbar</i>&#160;ist, gibt es eine Ankn&#252;pfung aus einem Segment per ModelPort-Nr in das Modell
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node CREATED="1682611423253" ID="ID_1136070257" MODIFIED="1682611949376" TEXT="Vorschau: Datenstruktur">
<linktarget COLOR="#735061" DESTINATION="ID_1136070257" ENDARROW="Default" ENDINCLINATION="-651;-968;" ID="Arrow_ID_1804652676" SOURCE="ID_296140708" STARTARROW="None" STARTINCLINATION="-518;37;"/>
<node CREATED="1682611979955" ID="ID_853916933" MODIFIED="1682611992260">