Job-Planning: new draft - organise the overall planning process
- introduce a new entity: RenderDrive - it supersedes the CalcPlanCalculation, but is managed by CalcStream - moreover, the RenderDrive will house a IterTreeExplorer-Pipeline - define the concerns and relationships more clearly (see Drawing) - prerequisite to disentangle the Job-planning "mechanics"
This commit is contained in:
parent
bcd2b3d632
commit
25c8579695
18 changed files with 2436 additions and 86 deletions
1798
doc/devel/draw/Play.Dispatch.svg
Normal file
1798
doc/devel/draw/Play.Dispatch.svg
Normal file
File diff suppressed because it is too large
Load diff
|
After Width: | Height: | Size: 105 KiB |
|
|
@ -53,10 +53,10 @@ with the *ASCIIDOC* tool and published at the [Lumiera website](http://Lumiera.o
|
||||||
|
|
||||||
/* ==== Layers ==== */
|
/* ==== Layers ==== */
|
||||||
|
|
||||||
/** @defgroup backend Backend-Layer
|
/** @defgroup vault Vault-Layer
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @defgroup proc Proc-Layer
|
/** @defgroup steam Steam-Layer
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @defgroup gui Graphical User Interface
|
/** @defgroup gui Graphical User Interface
|
||||||
|
|
@ -65,23 +65,23 @@ with the *ASCIIDOC* tool and published at the [Lumiera website](http://Lumiera.o
|
||||||
/* ==== Subsystems ==== */
|
/* ==== Subsystems ==== */
|
||||||
|
|
||||||
/** @defgroup asset Asset Management
|
/** @defgroup asset Asset Management
|
||||||
@ingroup proc
|
@ingroup steam
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @defgroup session Session
|
/** @defgroup session Session
|
||||||
@ingroup proc
|
@ingroup steam
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @defgroup player Playback and Render Control
|
/** @defgroup player Playback and Render Control
|
||||||
@ingroup proc
|
@ingroup steam
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @defgroup engine Render Engine
|
/** @defgroup engine Render Engine
|
||||||
@ingroup proc
|
@ingroup vault
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @defgroup scheduler Scheduler
|
/** @defgroup scheduler Scheduler
|
||||||
@ingroup backend
|
@ingroup vault
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
/** @file calc-plan-continuation.cpp
|
/** @file calc-plan-continuation.cpp
|
||||||
** Implementation elements of render process planning.
|
** Implementation elements of render process planning.
|
||||||
** @todo a draft created in 2013 and then stalled. This is not obsolete.
|
** @deprecated 4/2023 »Playback Vertical Slice« -- reworked into the RenderDrive /////////////////////////TICKET #1221
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@
|
||||||
** to the jobs, which perform and update this plan on the go. And in fact, the head of the
|
** to the jobs, which perform and update this plan on the go. And in fact, the head of the
|
||||||
** calculation process, the CalcStream, holds onto such a closure to access current planning.
|
** calculation process, the CalcStream, holds onto such a closure to access current planning.
|
||||||
**
|
**
|
||||||
** @todo a draft created in 2013 and then stalled. This is not obsolete.
|
** @deprecated 4/2023 »Playback Vertical Slice« -- reworked into the RenderDrive /////////////////////////TICKET #1221
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -65,7 +65,7 @@ namespace engine {
|
||||||
* planning process is determined and controlled by the CalcStream owning
|
* planning process is determined and controlled by the CalcStream owning
|
||||||
* this closure.
|
* this closure.
|
||||||
*
|
*
|
||||||
* @todo 5/13 still WIP -- write type comment
|
* @deprecated 4/2023 »Playback Vertical Slice« -- reworked into the RenderDrive //////////////////////////TICKET #1221
|
||||||
*/
|
*/
|
||||||
class CalcPlanContinuation
|
class CalcPlanContinuation
|
||||||
: public JobClosure
|
: public JobClosure
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@
|
||||||
#include "lib/error.hpp"
|
#include "lib/error.hpp"
|
||||||
#include "steam/play/timings.hpp"
|
#include "steam/play/timings.hpp"
|
||||||
#include "steam/play/output-slot.hpp"
|
#include "steam/play/output-slot.hpp"
|
||||||
#include "steam/engine/calc-plan-continuation.hpp"
|
#include "steam/engine/render-drive.hpp"
|
||||||
//#include "include/dummy-player-facade.h"
|
//#include "include/dummy-player-facade.h"
|
||||||
//#include "include/display-facade.h"
|
//#include "include/display-facade.h"
|
||||||
//#include "common/instancehandle.hpp"
|
//#include "common/instancehandle.hpp"
|
||||||
|
|
@ -56,6 +56,7 @@
|
||||||
//
|
//
|
||||||
//#include <string>
|
//#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
|
||||||
namespace steam {
|
namespace steam {
|
||||||
|
|
@ -68,23 +69,9 @@ namespace engine{
|
||||||
// using lumiera::Display;
|
// using lumiera::Display;
|
||||||
// using lumiera::DummyPlayer;
|
// using lumiera::DummyPlayer;
|
||||||
|
|
||||||
|
class RenderEnvironment;
|
||||||
|
|
||||||
/**
|
|
||||||
* Abstract definition of the environment
|
|
||||||
* hosting a given render activity (CalcStream).
|
|
||||||
* Exposes all the operations necessary to adjust the
|
|
||||||
* runtime behaviour of the render activity, like e.g.
|
|
||||||
* re-scheduling with modified playback speed. Since the
|
|
||||||
* CalcStream is an conceptual representation of "the rendering",
|
|
||||||
* the actual engine implementation is kept opaque this way.
|
|
||||||
*/
|
|
||||||
class RenderEnvironmentClosure
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual ~RenderEnvironmentClosure() { } ///< this is an interface
|
|
||||||
|
|
||||||
virtual play::Timings& effectiveTimings() =0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -108,29 +95,26 @@ namespace engine{
|
||||||
*/
|
*/
|
||||||
class CalcStream
|
class CalcStream
|
||||||
{
|
{
|
||||||
RenderEnvironmentClosure* eng_;
|
std::shared_ptr<RenderDrive> drive_;
|
||||||
engine::CalcPlanContinuation* plan_;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
CalcStream (RenderEnvironmentClosure& abstractEngine)
|
CalcStream (RenderEnvironment& abstractEngine)
|
||||||
: eng_(&abstractEngine)
|
: drive_{}/////////////////////////////////////////////////TODO
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
friend class EngineService;
|
friend class EngineService;
|
||||||
|
|
||||||
|
|
||||||
CalcStream
|
void
|
||||||
sendToOutput (play::DataSink)
|
sendToOutput (play::DataSink)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED ("set up dispatcher to start calculating and feeding to the given output sink");
|
UNIMPLEMENTED ("set up dispatcher to start calculating and feeding to the given output sink");
|
||||||
return *this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CalcStream()
|
CalcStream()
|
||||||
: eng_(0)
|
: drive_{}
|
||||||
, plan_(0)
|
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
~CalcStream() { }
|
~CalcStream() { }
|
||||||
|
|
@ -138,15 +122,6 @@ namespace engine{
|
||||||
// using standard copy operations
|
// using standard copy operations
|
||||||
|
|
||||||
|
|
||||||
play::Timings const&
|
|
||||||
getTimings()
|
|
||||||
{
|
|
||||||
if (!eng_)
|
|
||||||
throw error::State ("attempt to get the playback timings "
|
|
||||||
"of an unconfigured, disabled or halted calculation stream"
|
|
||||||
,error::LUMIERA_ERROR_LIFECYCLE);
|
|
||||||
return eng_->effectiveTimings();
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -66,11 +66,11 @@ namespace engine{
|
||||||
|
|
||||||
/** special engine configuration for mock/testing operation.
|
/** special engine configuration for mock/testing operation.
|
||||||
*/
|
*/
|
||||||
RenderEnvironmentClosure&
|
RenderEnvironment&
|
||||||
EngineServiceMock::configureCalculation (ModelPort,Timings,Quality)
|
EngineServiceMock::configureCalculation (ModelPort,Timings,Quality)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED ("represent *this as RenderEnvironmentClosure)");
|
UNIMPLEMENTED ("represent *this as RenderEnvironment Closure)");
|
||||||
RenderEnvironmentClosure* todo_fake(0); ////KABOOOM
|
RenderEnvironment* todo_fake(0); ////KABOOOM
|
||||||
|
|
||||||
return *todo_fake;
|
return *todo_fake;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ namespace engine{
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual RenderEnvironmentClosure& configureCalculation (ModelPort,Timings,Quality);
|
virtual RenderEnvironment& configureCalculation (ModelPort,Timings,Quality);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
/** @file engine-service.cpp
|
/** @file engine-service.cpp
|
||||||
** Implementation parts related to the engine service abstraction
|
** Implementation parts related to the engine service abstraction
|
||||||
|
** @warning as of 4/2023 Render-Engine integration work is underway ////////////////////////////////////////TICKET #1233
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -81,7 +82,7 @@ namespace engine{
|
||||||
OutputConnection& output,
|
OutputConnection& output,
|
||||||
Quality serviceQuality)
|
Quality serviceQuality)
|
||||||
{
|
{
|
||||||
RenderEnvironmentClosure& renderConfig = configureCalculation (mPort,nominalTimings,serviceQuality);
|
RenderEnvironment& renderConfig = configureCalculation (mPort,nominalTimings,serviceQuality);
|
||||||
function<CalcStream(play::DataSink)> triggerRenderStart = bind (activateCalculation, _1, ref(renderConfig));
|
function<CalcStream(play::DataSink)> triggerRenderStart = bind (activateCalculation, _1, ref(renderConfig));
|
||||||
|
|
||||||
CalcStreams runningCalculations;
|
CalcStreams runningCalculations;
|
||||||
|
|
@ -111,11 +112,11 @@ namespace engine{
|
||||||
/** @internal build a representation of a single, ongoing calculation effort.
|
/** @internal build a representation of a single, ongoing calculation effort.
|
||||||
* This "CalcStream" is tied to the actual engine implementation, but only
|
* This "CalcStream" is tied to the actual engine implementation, but only
|
||||||
* through an opaque link, representing this concrete engine as an
|
* through an opaque link, representing this concrete engine as an
|
||||||
* RenderEnvironmentClosure. This enables the created CalcStream to be
|
* engine::RenderEnvironment closure. This enables the created CalcStream
|
||||||
* re-configured and adjusted while running.
|
* to be re-configured and adjusted while running.
|
||||||
*/
|
*/
|
||||||
CalcStream
|
CalcStream
|
||||||
EngineService::activateCalculation (play::DataSink sink, RenderEnvironmentClosure& engineCallback)
|
EngineService::activateCalculation (play::DataSink sink, RenderEnvironment& engineCallback)
|
||||||
{
|
{
|
||||||
CalcStream calcStream(engineCallback);
|
CalcStream calcStream(engineCallback);
|
||||||
calcStream.sendToOutput (sink);
|
calcStream.sendToOutput (sink);
|
||||||
|
|
@ -132,18 +133,18 @@ namespace engine{
|
||||||
* the individual channel streams linked together for playback or rendering;
|
* the individual channel streams linked together for playback or rendering;
|
||||||
* they all share the same media type and quality settings.
|
* they all share the same media type and quality settings.
|
||||||
* @return an abstracted representation of the specific setup for this render;
|
* @return an abstracted representation of the specific setup for this render;
|
||||||
* from this point on, this RenderEnvironmentClosure will be the only way
|
* from this point on, this RenderEnvironment closure will be the only way
|
||||||
* for client code to talk to "the engine". The actual instance of this
|
* for client code to talk to "the engine". The actual instance of this
|
||||||
* closure is just a handle and can be copied; any CalcStream created
|
* closure is just a handle and can be copied; any CalcStream created
|
||||||
* off this closure will be linked to the same "environment" and be
|
* off this closure will be linked to the same "environment" and be
|
||||||
* tracked and managed for resource usage automatically.
|
* tracked and managed for resource usage automatically.
|
||||||
* @note variations and especially mock implementations of the render engine
|
* @note variations and especially mock implementations of the render engine
|
||||||
* might choose to configure internals differently. As long as the
|
* might choose to configure internals differently. As long as the
|
||||||
* CalcStream and the embedded RenderEnvironmentClosure are consistent,
|
* CalcStream and the embedded RenderEnvironment are consistent,
|
||||||
* such a specific configuration remains opaque for the user of the
|
* such a specific configuration remains opaque for the user of
|
||||||
* created render activity
|
* the created render activity
|
||||||
*/
|
*/
|
||||||
RenderEnvironmentClosure&
|
RenderEnvironment&
|
||||||
EngineService::configureCalculation (ModelPort mPort,
|
EngineService::configureCalculation (ModelPort mPort,
|
||||||
Timings nominalTimings,
|
Timings nominalTimings,
|
||||||
Quality serviceQuality)
|
Quality serviceQuality)
|
||||||
|
|
@ -151,7 +152,7 @@ namespace engine{
|
||||||
UNIMPLEMENTED ("Access and wire to the Scheduler-frontend. "
|
UNIMPLEMENTED ("Access and wire to the Scheduler-frontend. "
|
||||||
"Then access the Segmentation and invoke a builder function for a suitable dispatcher table. "
|
"Then access the Segmentation and invoke a builder function for a suitable dispatcher table. "
|
||||||
"Package all of this into a suitable RenderEnvironementClosure subclass.");
|
"Package all of this into a suitable RenderEnvironementClosure subclass.");
|
||||||
RenderEnvironmentClosure* todo_fake(0); ////KABOOOM
|
RenderEnvironment* todo_fake(0); ////KABOOOM
|
||||||
|
|
||||||
return *todo_fake;
|
return *todo_fake;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,8 @@
|
||||||
**
|
**
|
||||||
** @ingroup engine
|
** @ingroup engine
|
||||||
** @todo draft from 2013, stalled, but still relevant and to be continued eventually
|
** @todo draft from 2013, stalled, but still relevant and to be continued eventually
|
||||||
|
** @warning as of 4/2023 Render-Engine integration work is underway ////////////////////////////////////////TICKET #1233
|
||||||
|
**
|
||||||
** @see EngineInterface_test
|
** @see EngineInterface_test
|
||||||
** @see CalcStream_test
|
** @see CalcStream_test
|
||||||
** @see steam::play::PlayerService
|
** @see steam::play::PlayerService
|
||||||
|
|
@ -158,7 +160,7 @@ namespace engine{
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual RenderEnvironmentClosure& configureCalculation (ModelPort,Timings,Quality);
|
virtual RenderEnvironment& configureCalculation (ModelPort,Timings,Quality);
|
||||||
|
|
||||||
void activateTracing();
|
void activateTracing();
|
||||||
void disableTracing(); ///< EX_FREE
|
void disableTracing(); ///< EX_FREE
|
||||||
|
|
@ -166,7 +168,7 @@ namespace engine{
|
||||||
friend class EngineDiagnostics;
|
friend class EngineDiagnostics;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static CalcStream activateCalculation (play::DataSink, RenderEnvironmentClosure&);
|
static CalcStream activateCalculation (play::DataSink, RenderEnvironment&);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,7 @@ namespace engine {
|
||||||
* There is no reference to any kind of time grid (or similar session internals).
|
* There is no reference to any kind of time grid (or similar session internals).
|
||||||
*
|
*
|
||||||
* @todo 1/12 WIP-WIP-WIP defining the invocation sequence and render jobs
|
* @todo 1/12 WIP-WIP-WIP defining the invocation sequence and render jobs
|
||||||
|
* @todo 4/23 WIP-WIP-WIP recast the dispatch- and job invocation sequence
|
||||||
*/
|
*/
|
||||||
struct FrameCoord
|
struct FrameCoord
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -157,6 +157,8 @@ namespace engine {
|
||||||
,this->point_to_calculate_);
|
,this->point_to_calculate_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1276 :: to be refactored...
|
||||||
|
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1276 :: to be refactored...
|
||||||
/** integrate another chain of prerequisites into the current evaluation line.
|
/** integrate another chain of prerequisites into the current evaluation line.
|
||||||
* Further evaluation will start to visit prerequisites from the new starting point,
|
* Further evaluation will start to visit prerequisites from the new starting point,
|
||||||
* and return to the current evaluation chain later on exhaustion of the side chain.
|
* and return to the current evaluation chain later on exhaustion of the side chain.
|
||||||
|
|
@ -200,6 +202,8 @@ namespace engine {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1276 :: to be refactored...
|
||||||
|
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1276 :: to be refactored...
|
||||||
/**
|
/**
|
||||||
* iterator, exposing a sequence of JobPlanning elements
|
* iterator, exposing a sequence of JobPlanning elements
|
||||||
*/
|
*/
|
||||||
|
|
@ -314,6 +318,8 @@ namespace engine {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1276 :: to be refactored...
|
||||||
|
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1276 :: to be refactored...
|
||||||
/**
|
/**
|
||||||
* Generate a sequence of starting points for Job planning,
|
* Generate a sequence of starting points for Job planning,
|
||||||
* based on the underlying frame grid. This sequence will be
|
* based on the underlying frame grid. This sequence will be
|
||||||
|
|
|
||||||
113
src/steam/engine/render-drive.cpp
Normal file
113
src/steam/engine/render-drive.cpp
Normal file
|
|
@ -0,0 +1,113 @@
|
||||||
|
/*
|
||||||
|
RenderDrive - repetitively advancing a render calculation stream
|
||||||
|
|
||||||
|
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 render-drive.cpp
|
||||||
|
** Implementation elements of render process planning.
|
||||||
|
** @todo 4/2023 »Playback Vertical Slice« -- effort towards first integration of render process ////////////TICKET #1221
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "steam/engine/render-drive.hpp"
|
||||||
|
#include "steam/engine/frame-coord.hpp"
|
||||||
|
#include "steam/engine/job-ticket.hpp"
|
||||||
|
#include "lib/time/timevalue.hpp"
|
||||||
|
//#include "lib/frameid.hpp"
|
||||||
|
//#include "steam/state.hpp"
|
||||||
|
|
||||||
|
#include <boost/functional/hash.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace steam {
|
||||||
|
namespace engine {
|
||||||
|
|
||||||
|
|
||||||
|
/** entry point (interface JobClosure): invoke the concrete job operation.
|
||||||
|
* In this case, the job operation is responsible for planning a chunk of actual render jobs.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
RenderDrive::invokeJobOperation (JobParameter parameter)
|
||||||
|
{
|
||||||
|
ASSERT (parameter.nominalTime == getTimings().getFrameStartAt (parameter.invoKey.frameNumber));
|
||||||
|
|
||||||
|
this->performJobPlanningChunk (parameter.invoKey.frameNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
RenderDrive::signalFailure (JobParameter parameter, JobFailureReason reason)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED ("what needs to be done when a planning continuation cant be invoked?");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
RenderDrive::verify (Time nominalTime, InvocationInstanceID invoKey) const
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED ("the actual meat: advance the render process");
|
||||||
|
return getTimings().isValid()
|
||||||
|
&& Time::MIN < nominalTime && nominalTime < Time::MAX
|
||||||
|
&& nominalTime == getTimings().getFrameStartAt (invoKey.frameNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
size_t
|
||||||
|
RenderDrive::hashOfInstance (InvocationInstanceID invoKey) const
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED ("the actual meat: advance the render process");
|
||||||
|
return boost::hash_value (invoKey.frameNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Job
|
||||||
|
RenderDrive::prepareRenderPlanningFrom (FrameCnt startFrame)
|
||||||
|
{
|
||||||
|
InvocationInstanceID invoKey;
|
||||||
|
invoKey.frameNumber = startFrame;
|
||||||
|
Time nominalPlanningStartTime = getTimings().getFrameStartAt (startFrame);
|
||||||
|
|
||||||
|
return Job(*this, invoKey, nominalPlanningStartTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
RenderDrive::performJobPlanningChunk(FrameCnt nextStartFrame)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED ("the actual meat: advance the render process");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Job
|
||||||
|
RenderDrive::buildFollowUpJobFrom (TimeAnchor const& refPoint)
|
||||||
|
{
|
||||||
|
return this->prepareRenderPlanningFrom(
|
||||||
|
refPoint.getNextAnchorPoint());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}} // namespace engine
|
||||||
155
src/steam/engine/render-drive.hpp
Normal file
155
src/steam/engine/render-drive.hpp
Normal file
|
|
@ -0,0 +1,155 @@
|
||||||
|
/*
|
||||||
|
RENDER-DRIVE.hpp - repetitively advancing a render calculation stream
|
||||||
|
|
||||||
|
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 render-drive.hpp
|
||||||
|
** The active core within a CalcStream, causing the render mechanism to re-trigger repeatedly.
|
||||||
|
** Rendering is seen as an open-ended, ongoing process, and thus the management and planning
|
||||||
|
** of the render process itself is performed chunk wise and embedded into the other rendering
|
||||||
|
** calculations. The _"rendering-as-it-is-planned-right-now"_ can be represented as a closure
|
||||||
|
** to the jobs, which perform and update this plan on the go. And in fact, the head of the
|
||||||
|
** calculation process, the CalcStream, maintains this closure instance, as parametrised
|
||||||
|
** with the appropriate configuration for the specific playback/render process underway.
|
||||||
|
** Enclosed into this instance lives the actual job planning pipeline, connected at the
|
||||||
|
** rear to the dispatcher and thus to the fixture and the low-level model
|
||||||
|
**
|
||||||
|
** @todo 4/2023 »Playback Vertical Slice« -- effort towards first integration of render process ////////////TICKET #1221
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef STEAM_ENGINE_RENDER_DRIVE_H
|
||||||
|
#define STEAM_ENGINE_RENDER_DRIVE_H
|
||||||
|
|
||||||
|
#include "steam/common.hpp"
|
||||||
|
#include "steam/mobject/model-port.hpp"
|
||||||
|
#include "steam/engine/time-anchor.hpp"
|
||||||
|
#include "steam/engine/dispatcher.hpp"
|
||||||
|
#include "steam/play/timings.hpp"
|
||||||
|
#include "vault/engine/job.h"
|
||||||
|
#include "lib/nocopy.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
namespace steam {
|
||||||
|
namespace engine {
|
||||||
|
|
||||||
|
// using std::function;
|
||||||
|
using vault::engine::JobParameter;
|
||||||
|
using vault::engine::JobClosure;
|
||||||
|
using mobject::ModelPort;
|
||||||
|
// using lib::time::TimeSpan;
|
||||||
|
// using lib::time::FSecs;
|
||||||
|
// using lib::time::Time;
|
||||||
|
using lib::time::FrameCnt;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract definition of the environment
|
||||||
|
* hosting a given render activity (CalcStream).
|
||||||
|
* Exposes all the operations necessary to adjust the
|
||||||
|
* runtime behaviour of the render activity, like e.g.
|
||||||
|
* re-scheduling with modified playback speed. Since the
|
||||||
|
* CalcStream is an conceptual representation of "the rendering",
|
||||||
|
* the actual engine implementation is kept opaque this way.
|
||||||
|
*/
|
||||||
|
class RenderEnvironment
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~RenderEnvironment() { } ///< this is an interface
|
||||||
|
|
||||||
|
virtual play::Timings& effectiveTimings() =0;
|
||||||
|
virtual Dispatcher& getDispatcher() =0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The active drive to keep the render process going -- implemented as a
|
||||||
|
* job planning job, that repeatedly triggers itself again for the next
|
||||||
|
* planning chunk. The RenderDrive is created and owned by the corresponding
|
||||||
|
* CalcStream, and operates the job planning pipeline, backed by the dispatcher.
|
||||||
|
*
|
||||||
|
* @todo 4/23 early DRAFT -- find out what this does and write type comment
|
||||||
|
*/
|
||||||
|
class RenderDrive
|
||||||
|
: public JobClosure
|
||||||
|
, util::NonCopyable
|
||||||
|
{
|
||||||
|
|
||||||
|
RenderEnvironment& engine_;
|
||||||
|
|
||||||
|
// const ModelPort modelPort_;
|
||||||
|
// const uint channel_;
|
||||||
|
|
||||||
|
|
||||||
|
/* === JobClosure Interface === */
|
||||||
|
|
||||||
|
JobKind
|
||||||
|
getJobKind() const
|
||||||
|
{
|
||||||
|
return META_JOB;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool verify (Time, InvocationInstanceID) const;
|
||||||
|
size_t hashOfInstance (InvocationInstanceID) const;
|
||||||
|
|
||||||
|
void invokeJobOperation (JobParameter);
|
||||||
|
void signalFailure (JobParameter, JobFailureReason);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* @todo
|
||||||
|
*/
|
||||||
|
RenderDrive (RenderEnvironment& renderEnvironment
|
||||||
|
,ModelPort port, uint chan)
|
||||||
|
: engine_{renderEnvironment}
|
||||||
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
play::Timings const&
|
||||||
|
getTimings() const
|
||||||
|
{
|
||||||
|
return engine_.effectiveTimings();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** create the "start trigger job"
|
||||||
|
* Scheduling this job will effectively get a calculation stream
|
||||||
|
* into active processing, since it causes the first chunk of job planning
|
||||||
|
* plus the automated scheduling of follow-up planning jobs. The relation
|
||||||
|
* to real (wall clock) time will be established when the returned job
|
||||||
|
* is actually invoked
|
||||||
|
* @param startFrame where to begin rendering, relative to the nominal
|
||||||
|
* time grid implicitly given by the ModelPort to be pulled
|
||||||
|
*/
|
||||||
|
Job prepareRenderPlanningFrom (FrameCnt startFrame);
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
void performJobPlanningChunk(FrameCnt nextStartFrame);
|
||||||
|
Job buildFollowUpJobFrom (TimeAnchor const& refPoint);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}} // namespace steam::engine
|
||||||
|
#endif /*STEAM_ENGINE_RENDER_DRIVE_H*/
|
||||||
|
|
@ -80,7 +80,7 @@ namespace mobject {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle denoting a point within the model,
|
* Handle designating a point within the model,
|
||||||
* where actually output data can be pulled.
|
* where actually output data can be pulled.
|
||||||
* ModelPort is a frontend to be used by clients.
|
* ModelPort is a frontend to be used by clients.
|
||||||
* These ModelPort handle objects may be copied and stored
|
* These ModelPort handle objects may be copied and stored
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@ namespace play {
|
||||||
public:
|
public:
|
||||||
PlaybackUrgency playbackUrgency;
|
PlaybackUrgency playbackUrgency;
|
||||||
boost::rational<FrameCnt> playbackSpeed; /////////////TICKET #902 we need a more generic representation for variable speed playback
|
boost::rational<FrameCnt> playbackSpeed; /////////////TICKET #902 we need a more generic representation for variable speed playback
|
||||||
Time scheduledDelivery;
|
Time scheduledDelivery; ///< a wall clock time corresponding to the Grid's origin. Can be Time::Never (=not time bound)
|
||||||
Duration outputLatency;
|
Duration outputLatency;
|
||||||
|
|
||||||
explicit
|
explicit
|
||||||
|
|
|
||||||
BIN
wiki/draw/Play.Dispatch.png
Normal file
BIN
wiki/draw/Play.Dispatch.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 85 KiB |
|
|
@ -2525,14 +2525,14 @@ Additionally, they may be used for resource management purposes by embedding a r
|
||||||
#* one OpenGL Dataframe could contain raw texture data (but I am lacking expertise for this topic)
|
#* one OpenGL Dataframe could contain raw texture data (but I am lacking expertise for this topic)
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div title="FrameDispatcher" modifier="Ichthyostega" created="201105222330" modified="201712101920" tags="def Rendering" changecount="10">
|
<div title="FrameDispatcher" modifier="Ichthyostega" created="201105222330" modified="202304170244" tags="def Rendering" changecount="18">
|
||||||
<pre>An entity within the RenderEngine, responsible for translating a logical [[calculation stream|CalcStream]] (corresponding to a PlayProcess) into a sequence of individual RenderJob entries, which can then be handed over to the [[Scheduler]]. Performing this operation involves a special application of [[time quantisation|TimeQuant]]: after establishing a suitable starting point, a typically contiguous series of frame numbers need to be generated, together with the time coordinates for each of those frames.
|
<pre>An entity within the RenderEngine, responsible for translating a logical [[calculation stream|CalcStream]] (corresponding to a PlayProcess) into a sequence of individual RenderJob entries, which can then be handed over to the [[Scheduler]]. Performing this operation involves a special application of [[time quantisation|TimeQuant]]: after establishing a suitable starting point, a typically contiguous series of frame numbers need to be generated, together with the time coordinates for each of those frames.
|
||||||
|
|
||||||
The dispatcher works together with the job ticket(s) and the scheduler; actually these are the //core abstractions//&nbsp; the process of ''job planning'' relies on. While the actual scheduler implementation lives within the Vault, the job tickets and the dispatcher are located within the [[Segmentation]], which is the backbone of the [[low-level model|LowLevelModel]]. More specifically, the dispatcher interface is //implemented//&nbsp; by a set of &rarr; [[dispatcher tables|DispatcherTables]] within the segmentation.
|
The dispatcher works together with the job ticket(s) and the scheduler; actually these are the //core abstractions//&nbsp; the process of ''job planning'' relies on. While the actual scheduler implementation lives within the Vault, the job tickets and the dispatcher are located within the [[Segmentation]], which is the backbone of the [[low-level model|LowLevelModel]]. More specifically, the dispatcher interface is //implemented//&nbsp; by a set of &rarr; [[dispatcher tables|DispatcherTables]] within the segmentation.
|
||||||
|
|
||||||
{{red{stalled since 2014}}} -- development on this (important) topic has been postponed. Moreover, some rough edges remain within the Design &rarr; see [[some notes...|AboutMonads]]
|
{{red{stalled since 2014}}} -- development on this (important) topic has been postponed. Moreover, some rough edges remain within the Design &rarr; see [[some notes...|AboutMonads]]
|
||||||
|
|
||||||
!defining the dispatcher interface
|
!Collaborations
|
||||||
The purpose of this interface is to support the planning of new jobs, for a given CalcStream. From time to time, a chunk of new RenderJob entries will be prepared for the [[Scheduler]]. Each job knows his frame number and the actual ProcNode to operate. So, to start planning jobs, we need to translate time &rarr; frame number &rarr; segment &rarr; real exit node.
|
The purpose of this interface is to support the planning of new jobs, for a given CalcStream. From time to time, a chunk of new RenderJob entries will be prepared for the [[Scheduler]]. Each job knows his frame number and the actual ProcNode to operate. So, to start planning jobs, we need to translate time &rarr; frame number &rarr; segment &rarr; real exit node.
|
||||||
|
|
||||||
!!!Invocation situation
|
!!!Invocation situation
|
||||||
|
|
@ -2555,7 +2555,7 @@ The frame dispatch step joins and combines multiple time axes. Through the proce
|
||||||
These complex relationships are reflected in the invocation structure leading to an individual frame job. The [[calculation stream|CalcStream]] provides the [[render/playback timings|Timings]], while the actual implementation of the dispatcher, backed by the [[Fixture]] and thus linked to the session models, gets to relate the effective nominal time, the frame number, the exit node and the //processing function.//
|
These complex relationships are reflected in the invocation structure leading to an individual frame job. The [[calculation stream|CalcStream]] provides the [[render/playback timings|Timings]], while the actual implementation of the dispatcher, backed by the [[Fixture]] and thus linked to the session models, gets to relate the effective nominal time, the frame number, the exit node and the //processing function.//
|
||||||
|
|
||||||
!!!controlling the planning process
|
!!!controlling the planning process
|
||||||
New render jobs are planned as an ongoing process, proceeding in chunks of evaluation. Typically, to calculate a single frame, several jobs are necessary -- to find out which and how, we'll have to investigate the model structures corresponding to this frame, resulting in a tree of prerequisites. Basically, the planning for each frame is seeded by establishing the nominal time position, in accordance to the current [[mode of playback|NonLinearPlayback]]. Conducted by the [[play controller|PlayController]], there is a strategy to define the precise way of spacing and sequence of frames to be calculated -- yet for the actual process of evaluating the prerequisites and planning the jobs, those details are irrelevant and hidden behind the dispatcher interface, as is most of the model and context information. The planning operation just produces a sequence of job definitions, which can then be associated with real time (wall clock) deadlines for delivery. The relation between the spacing and progression of the nominal frame time (as controlled by the playback mode) and the actual sequence of deadlines (which is more or less dictated by the output device) is rather loose and established anew for each planning chunk, relying on the ''time anchor''. The latter in turn uses the [[timings record|Timings]] of the [[calculation stream|CalcStream]] currently being planned, and these timings act as a strategy to represent the underlying timing grid and playback modalities.
|
[>img[Structure of the Fixture|draw/Play.Dispatch.png]]New render jobs are planned as an ongoing process, proceeding in chunks of evaluation. Typically, to calculate a single frame, several jobs are necessary -- to find out which and how, we'll have to investigate the model structures corresponding to this frame, resulting in a tree of prerequisites. Basically, the planning for each frame is seeded by establishing the nominal time position, in accordance to the current [[mode of playback|NonLinearPlayback]]. Conducted by the [[play controller|PlayController]], there is a strategy to define the precise way of spacing and sequence of frames to be calculated -- yet for the actual process of evaluating the prerequisites and planning the jobs, those details are irrelevant and hidden behind the dispatcher interface, as is most of the model and context information. The planning operation just produces a sequence of job definitions, which can then be associated with real time (wall clock) deadlines for delivery. The relation between the spacing and progression of the nominal frame time (as controlled by the playback mode) and the actual sequence of deadlines (which is more or less dictated by the output device) is rather loose and established anew for each planning chunk, relying on the ''time anchor''. The latter in turn uses the [[timings record|Timings]] of the [[calculation stream|CalcStream]] currently being planned, and these timings act as a strategy to represent the underlying timing grid and playback modalities.
|
||||||
|
|
||||||
While the sequence of frame jobs to be planned is possibly infinite, the actual evaluation is confined to the current planning chunk. When done with planning such a chunk of jobs, an additional ''continuation job'' is included to prepare a re-invocation of the planning function for preparation of the next chunk. Terminating playback is equivalent to not including or not invoking this continuation job. Please note that planning proceeds independently for each [[Feed]] -- in Lumiera the //current playback position//&nbsp; is just a conceptual projection of wall clock time to nominal time, yet there is no such thing like a synchronously proceeding "Playhead"
|
While the sequence of frame jobs to be planned is possibly infinite, the actual evaluation is confined to the current planning chunk. When done with planning such a chunk of jobs, an additional ''continuation job'' is included to prepare a re-invocation of the planning function for preparation of the next chunk. Terminating playback is equivalent to not including or not invoking this continuation job. Please note that planning proceeds independently for each [[Feed]] -- in Lumiera the //current playback position//&nbsp; is just a conceptual projection of wall clock time to nominal time, yet there is no such thing like a synchronously proceeding "Playhead"
|
||||||
|
|
||||||
|
|
@ -7095,7 +7095,7 @@ We need to detect attaching and detaching of
|
||||||
* root &harr; [[Fork]]
|
* root &harr; [[Fork]]
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div title="Segmentation" modifier="Ichthyostega" created="201012121901" modified="201204150033" tags="def spec Builder">
|
<div title="Segmentation" modifier="Ichthyostega" created="201012121901" modified="202304162242" tags="def spec Builder" changecount="4">
|
||||||
<pre>//Segmentation of timeline// denotes a data structure and a step in the BuildProcess.
|
<pre>//Segmentation of timeline// denotes a data structure and a step in the BuildProcess.
|
||||||
When [[building the fixture|BuildFixture]], ~MObjects -- as handled by their Placements -- are grouped below each timeline using them; Placements are then to be resolved into [[explicit Placements|ExplicitPlacement]], resulting in a single well defined time interval for each object. This allows to cut this effective timeline into slices of constant wiring structure, which are represented through the ''Segmentation Datastructure'', a time axis with segments holding object placements and [[exit nodes|ExitNode]]. &nbsp;&rarr; see [[structure of the Fixture|Fixture]]
|
When [[building the fixture|BuildFixture]], ~MObjects -- as handled by their Placements -- are grouped below each timeline using them; Placements are then to be resolved into [[explicit Placements|ExplicitPlacement]], resulting in a single well defined time interval for each object. This allows to cut this effective timeline into slices of constant wiring structure, which are represented through the ''Segmentation Datastructure'', a time axis with segments holding object placements and [[exit nodes|ExitNode]]. &nbsp;&rarr; see [[structure of the Fixture|Fixture]]
|
||||||
* for each Timeline we get a Segmentation
|
* for each Timeline we get a Segmentation
|
||||||
|
|
@ -7112,7 +7112,7 @@ When [[building the fixture|BuildFixture]], ~MObjects -- as handled by their Pla
|
||||||
;(2) commit stage
|
;(2) commit stage
|
||||||
: -- after the build process(es) are completed, the new fixture gets ''committed'', thus becoming the officially valid state to be rendered. As render processes might be going on in parallel, some kind of locking or barrier is required. It seems advisable to make the change into a single atomic hot-swap. Meaning we'd get a single access point to be protected. But there is another twist: We need to find out which render processes to cancel and restart, to pick up the changes introduced by this build process -- which might include adding and deleting of timelines as a whole, and any conceivable change to the segmentation grid. Because of the highly dynamic nature of the placements, on the other hand it isn't viable to expect the high-level model to provide this information. Thus we need to find out about a ''change coverage'' at this point. We might expand on that idea to //prune any new segments which aren't changed.// This way, only a write barrier would be necessary on switching the actually changed segments, and any render processes touching these would be //tainted.// Old allocations could be released after all tainted processes are known to be terminated.
|
: -- after the build process(es) are completed, the new fixture gets ''committed'', thus becoming the officially valid state to be rendered. As render processes might be going on in parallel, some kind of locking or barrier is required. It seems advisable to make the change into a single atomic hot-swap. Meaning we'd get a single access point to be protected. But there is another twist: We need to find out which render processes to cancel and restart, to pick up the changes introduced by this build process -- which might include adding and deleting of timelines as a whole, and any conceivable change to the segmentation grid. Because of the highly dynamic nature of the placements, on the other hand it isn't viable to expect the high-level model to provide this information. Thus we need to find out about a ''change coverage'' at this point. We might expand on that idea to //prune any new segments which aren't changed.// This way, only a write barrier would be necessary on switching the actually changed segments, and any render processes touching these would be //tainted.// Old allocations could be released after all tainted processes are known to be terminated.
|
||||||
;(3) rendering use
|
;(3) rendering use
|
||||||
:Each play/render process employs a ''frame dispatch step'' to get the right exit node for pulling a given frame (&rarr; [[Dispatcher|FrameDispatcher]]). From there on, the process proceeds into the [[processing nodes|ProcNode]], interleaved with Vault/scheduler actions due to splitting into individually scheduled jobs. The storage of these processing nodes and accompanying wiring descriptors is hooked up behind the individual segments, by sharing a common {{{AllocationCluster}}}. Yet the calculation of individual frames also depends on ''parameters'' and especially ''automation'' linked with objects in the high-level model. It is likely that there might be some sharing or some kind of additional communication interface, as the intention was to allow ''live changes'' to automated values. <br/>{{red{WIP 12/2010}}} details need to be worked out. &rarr; [[parameter wiring concept|Wiring]]
|
:Each play/render process employs a ''frame dispatch step'' to get the right exit node for pulling a given frame (&rarr; [[Dispatcher|FrameDispatcher]]). Planning appropriate [[render jobs|RenderJob]] involves support by the JobTicket for each Segment and port, which provides //a blueprint for rendering and connectivity.// From there on, the calculation process -- transmitted through [[Scheduler activity|RenderActivity]] -- proceeds into the [[processing nodes|ProcNode]]. The storage of these processing nodes and accompanying wiring descriptors is hooked up behind the individual segments, by sharing a common {{{AllocationCluster}}}. Yet the calculation of individual frames also depends on ''parameters'' and especially ''automation'' linked with objects in the high-level model. It is likely that there might be some sharing or some kind of additional communication interface, as the intention was to allow ''live changes'' to automated values. <br/>{{red{WIP 4/2023}}} details about to be elaborated &rarr; PlaybackVerticalSlice
|
||||||
!!!observations
|
!!!observations
|
||||||
* Storage and initialisation for explicit placements is an issue. We should strive at making that inline as much as possible.
|
* Storage and initialisation for explicit placements is an issue. We should strive at making that inline as much as possible.
|
||||||
* the overall segmentation emerges from a sorting of time points, which are start points of explicit placements
|
* the overall segmentation emerges from a sorting of time points, which are start points of explicit placements
|
||||||
|
|
|
||||||
|
|
@ -68383,8 +68383,39 @@
|
||||||
<node CREATED="1448314932726" ID="ID_669869188" MODIFIED="1557498707237" POSITION="right" TEXT="Render">
|
<node CREATED="1448314932726" ID="ID_669869188" MODIFIED="1557498707237" POSITION="right" TEXT="Render">
|
||||||
<icon BUILTIN="stop"/>
|
<icon BUILTIN="stop"/>
|
||||||
<node CREATED="1512923568305" ID="ID_1329323311" MODIFIED="1557498707237" TEXT="Player">
|
<node CREATED="1512923568305" ID="ID_1329323311" MODIFIED="1557498707237" TEXT="Player">
|
||||||
<node CREATED="1512923658341" ID="ID_1855109590" MODIFIED="1557498707237" TEXT="Interface"/>
|
<node CREATED="1512923658341" ID="ID_1855109590" MODIFIED="1557498707237" TEXT="Interface">
|
||||||
<node CREATED="1512923661892" ID="ID_1580804608" MODIFIED="1557498707237" TEXT="Control"/>
|
<node CREATED="1681597122589" ID="ID_1328094537" MODIFIED="1681597126593" TEXT="Spec">
|
||||||
|
<node CREATED="1681597127282" ID="ID_761595186" MODIFIED="1681597130528" TEXT="Timings">
|
||||||
|
<node CREATED="1681597133168" ID="ID_1308926052" MODIFIED="1681597148947">
|
||||||
|
<richcontent TYPE="NODE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
Zeitmaß für <i>diesen </i>Wiedergabevorgang
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681597167602" ID="ID_205208976" MODIFIED="1681597182099" TEXT="playbackUrgency = {ASAP,NICE,TIMEBOUND}"/>
|
||||||
|
<node CREATED="1681597212993" ID="ID_615732474" MODIFIED="1681597273762" TEXT="scheduledDelivery(nur TIMEBOUND) ≔ »wall clock time« des Grid-Ursprungs"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1512923661892" ID="ID_1580804608" MODIFIED="1557498707237" TEXT="Control">
|
||||||
|
<node CREATED="1681685173232" ID="ID_1497274477" MODIFIED="1681685179516" TEXT="Play-controller"/>
|
||||||
|
<node CREATED="1681685180222" ID="ID_1922002466" MODIFIED="1681685183138" TEXT="Play-Process"/>
|
||||||
|
<node CREATED="1681685183696" ID="ID_453528685" MODIFIED="1681685186032" TEXT="CalcStream">
|
||||||
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681685187803" ID="ID_1654025761" MODIFIED="1681685196333" TEXT="Umbau 4/23">
|
||||||
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1681685197444" ID="ID_1313231227" MODIFIED="1681685335962" TEXT="kann man CalcStream move-only machen?">
|
||||||
|
<linktarget COLOR="#e0804f" DESTINATION="ID_1313231227" ENDARROW="Default" ENDINCLINATION="2513;164;" ID="Arrow_ID_861540006" SOURCE="ID_439004499" STARTARROW="None" STARTINCLINATION="676;-84;"/>
|
||||||
|
<icon BUILTIN="help"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
<node CREATED="1512923672275" ID="ID_1369059082" MODIFIED="1557498707237" TEXT="Wiring"/>
|
<node CREATED="1512923672275" ID="ID_1369059082" MODIFIED="1557498707237" TEXT="Wiring"/>
|
||||||
<node CREATED="1512923682530" ID="ID_1204903801" MODIFIED="1557498707237" TEXT="Planning">
|
<node CREATED="1512923682530" ID="ID_1204903801" MODIFIED="1557498707237" TEXT="Planning">
|
||||||
<node CREATED="1512925214070" ID="ID_491842947" MODIFIED="1557498707237" TEXT="1.Entwurf">
|
<node CREATED="1512925214070" ID="ID_491842947" MODIFIED="1557498707237" TEXT="1.Entwurf">
|
||||||
|
|
@ -68457,7 +68488,7 @@
|
||||||
</html></richcontent>
|
</html></richcontent>
|
||||||
<icon BUILTIN="messagebox_warning"/>
|
<icon BUILTIN="messagebox_warning"/>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1680568453218" ID="ID_1951039343" MODIFIED="1680568466316" TEXT="was passiert in job-planning.hpp?">
|
<node COLOR="#435e98" CREATED="1680568453218" FOLDED="true" ID="ID_1951039343" MODIFIED="1681511763512" TEXT="was passiert in job-planning.hpp?">
|
||||||
<icon BUILTIN="help"/>
|
<icon BUILTIN="help"/>
|
||||||
<node CREATED="1681007533926" ID="ID_282014609" MODIFIED="1681007543121" TEXT="der schrittweise Planungsmechanismus">
|
<node CREATED="1681007533926" ID="ID_282014609" MODIFIED="1681007543121" TEXT="der schrittweise Planungsmechanismus">
|
||||||
<node CREATED="1681007545653" ID="ID_1444648679" MODIFIED="1681007547984" TEXT="gegeben....">
|
<node CREATED="1681007545653" ID="ID_1444648679" MODIFIED="1681007547984" TEXT="gegeben....">
|
||||||
|
|
@ -68513,7 +68544,7 @@
|
||||||
<node CREATED="1681077183565" ID="ID_96294471" MODIFIED="1681077188182" TEXT="Referenz auf den Dispatcher"/>
|
<node CREATED="1681077183565" ID="ID_96294471" MODIFIED="1681077188182" TEXT="Referenz auf den Dispatcher"/>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1681089094840" ID="ID_573422091" MODIFIED="1681089145775" TEXT="hier steigen wir direkt in die Monaden-Kacke ein">
|
<node CREATED="1681089094840" ID="ID_573422091" MODIFIED="1681089145775" TEXT="hier steigen wir direkt in die Monaden-Kacke ein">
|
||||||
<arrowlink COLOR="#b03a63" DESTINATION="ID_256520127" ENDARROW="Default" ENDINCLINATION="34;-147;" ID="Arrow_ID_1652427615" STARTARROW="None" STARTINCLINATION="-162;10;"/>
|
<arrowlink COLOR="#983ab0" DESTINATION="ID_256520127" ENDARROW="Default" ENDINCLINATION="34;-147;" ID="Arrow_ID_1652427615" STARTARROW="None" STARTINCLINATION="-162;10;"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1681076854338" ID="ID_137032068" MODIFIED="1681076861563" TEXT="für jeden Schritt...">
|
<node CREATED="1681076854338" ID="ID_137032068" MODIFIED="1681076861563" TEXT="für jeden Schritt...">
|
||||||
|
|
@ -68540,8 +68571,8 @@
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1681089112917" ID="ID_256520127" MODIFIED="1681089910511" TEXT="was machen die Monaden hier?">
|
<node COLOR="#435e98" CREATED="1681089112917" ID="ID_256520127" MODIFIED="1681511734896" TEXT="was machen die Monaden hier?">
|
||||||
<linktarget COLOR="#b03a63" DESTINATION="ID_256520127" ENDARROW="Default" ENDINCLINATION="34;-147;" ID="Arrow_ID_1652427615" SOURCE="ID_573422091" STARTARROW="None" STARTINCLINATION="-162;10;"/>
|
<linktarget COLOR="#983ab0" DESTINATION="ID_256520127" ENDARROW="Default" ENDINCLINATION="34;-147;" ID="Arrow_ID_1652427615" SOURCE="ID_573422091" STARTARROW="None" STARTINCLINATION="-162;10;"/>
|
||||||
<icon BUILTIN="help"/>
|
<icon BUILTIN="help"/>
|
||||||
<node CREATED="1681089212896" ID="ID_337268997" MODIFIED="1681170523138" TEXT="JobPlanningSequence">
|
<node CREATED="1681089212896" ID="ID_337268997" MODIFIED="1681170523138" TEXT="JobPlanningSequence">
|
||||||
<linktarget COLOR="#b4597c" DESTINATION="ID_337268997" ENDARROW="Default" ENDINCLINATION="18;60;" ID="Arrow_ID_311262374" SOURCE="ID_1034254567" STARTARROW="None" STARTINCLINATION="-177;-12;"/>
|
<linktarget COLOR="#b4597c" DESTINATION="ID_337268997" ENDARROW="Default" ENDINCLINATION="18;60;" ID="Arrow_ID_311262374" SOURCE="ID_1034254567" STARTARROW="None" STARTINCLINATION="-177;-12;"/>
|
||||||
|
|
@ -68645,7 +68676,7 @@
|
||||||
<node CREATED="1681090118071" ID="ID_600100783" MODIFIED="1681090127602" TEXT="Ergebnistyp der FlatMap-Operation"/>
|
<node CREATED="1681090118071" ID="ID_600100783" MODIFIED="1681090127602" TEXT="Ergebnistyp der FlatMap-Operation"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1681171685380" ID="ID_1860128661" MODIFIED="1681171722392" TEXT="wann / wie findet die eigentliche Planung(Auswertung) statt?">
|
<node COLOR="#435e98" CREATED="1681171685380" ID="ID_1860128661" MODIFIED="1681511730984" TEXT="wann / wie findet die eigentliche Planung(Auswertung) statt?">
|
||||||
<icon BUILTIN="help"/>
|
<icon BUILTIN="help"/>
|
||||||
<node CREATED="1681171733502" ID="ID_433565768" MODIFIED="1681171751420" TEXT="expandPrerequisites(JobPlanning) wird monadisch gebunden (flatMap)"/>
|
<node CREATED="1681171733502" ID="ID_433565768" MODIFIED="1681171751420" TEXT="expandPrerequisites(JobPlanning) wird monadisch gebunden (flatMap)"/>
|
||||||
<node CREATED="1681171757291" ID="ID_1142053734" MODIFIED="1681171885232">
|
<node CREATED="1681171757291" ID="ID_1142053734" MODIFIED="1681171885232">
|
||||||
|
|
@ -68844,28 +68875,31 @@
|
||||||
<icon BUILTIN="yes"/>
|
<icon BUILTIN="yes"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1681250556444" ID="ID_1991482624" MODIFIED="1681250575871" TEXT="Grundlegendes Auswertungs-Schema">
|
<node COLOR="#435e98" CREATED="1681250556444" ID="ID_1991482624" MODIFIED="1681511717857" TEXT="Grundlegendes Auswertungs-Schema">
|
||||||
<icon BUILTIN="yes"/>
|
<icon BUILTIN="yes"/>
|
||||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1681250582708" ID="ID_1884826569" MODIFIED="1681250667138" TEXT="auf welcher Ebene wird die fortschreitende Planung angesetzt?">
|
<node COLOR="#435e98" CREATED="1681250582708" ID="ID_1884826569" MODIFIED="1681511406548" TEXT="auf welcher Ebene wird die fortschreitende Planung angesetzt?">
|
||||||
<icon BUILTIN="help"/>
|
<icon BUILTIN="help"/>
|
||||||
<node CREATED="1681250669452" ID="ID_1404510345" MODIFIED="1681424264776" TEXT="darüber">
|
<node CREATED="1681250669452" ID="ID_1404510345" MODIFIED="1681511443549" TEXT="darüber">
|
||||||
<arrowlink COLOR="#68678a" DESTINATION="ID_1399425577" ENDARROW="Default" ENDINCLINATION="-321;0;" ID="Arrow_ID_26789445" STARTARROW="None" STARTINCLINATION="-353;107;"/>
|
<arrowlink COLOR="#68678a" DESTINATION="ID_1399425577" ENDARROW="Default" ENDINCLINATION="-321;0;" ID="Arrow_ID_26789445" STARTARROW="None" STARTINCLINATION="-435;100;"/>
|
||||||
|
<icon BUILTIN="forward"/>
|
||||||
<node CREATED="1681250697202" ID="ID_591609787" MODIFIED="1681250718160" TEXT="die Pipeline beschreibt die fortlaufende Job-Planung lückenlos"/>
|
<node CREATED="1681250697202" ID="ID_591609787" MODIFIED="1681250718160" TEXT="die Pipeline beschreibt die fortlaufende Job-Planung lückenlos"/>
|
||||||
<node CREATED="1681250769368" ID="ID_772063728" MODIFIED="1681250784298" TEXT="ein separater Taktgeber ist darüber gesetzt..."/>
|
<node CREATED="1681250769368" ID="ID_772063728" MODIFIED="1681250784298" TEXT="ein separater Taktgeber ist darüber gesetzt..."/>
|
||||||
<node CREATED="1681250785294" ID="ID_1717449216" MODIFIED="1681250805743" TEXT="...und entnimmt jeweils einen »chunk« an Planung"/>
|
<node CREATED="1681250785294" ID="ID_1717449216" MODIFIED="1681250805743" TEXT="...und entnimmt jeweils einen »chunk« an Planung"/>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1681250684195" ID="ID_1446227888" MODIFIED="1681250686359" TEXT="darunter">
|
<node CREATED="1681250684195" ID="ID_1446227888" MODIFIED="1681511427222" TEXT="darunter">
|
||||||
|
<icon BUILTIN="button_cancel"/>
|
||||||
<node CREATED="1681250819275" ID="ID_92926923" MODIFIED="1681250835367" TEXT="der »chunk«-Taktgeber ist die Basis der Pipeline"/>
|
<node CREATED="1681250819275" ID="ID_92926923" MODIFIED="1681250835367" TEXT="der »chunk«-Taktgeber ist die Basis der Pipeline"/>
|
||||||
<node CREATED="1681250837199" ID="ID_947581885" MODIFIED="1681250885117" TEXT="jeder Schritt wird einmal monadisch entfaltet ⟶ Jobs für einen »chunk«"/>
|
<node CREATED="1681250837199" ID="ID_947581885" MODIFIED="1681250885117" TEXT="jeder Schritt wird einmal monadisch entfaltet ⟶ Jobs für einen »chunk«"/>
|
||||||
<node CREATED="1681250898279" ID="ID_1453593011" MODIFIED="1681250924584" TEXT="der Konsument erkennt das Ende eines Chunk — und pflanzt sich dann fort"/>
|
<node CREATED="1681250898279" ID="ID_1453593011" MODIFIED="1681250924584" TEXT="der Konsument erkennt das Ende eines Chunk — und pflanzt sich dann fort"/>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1681250688531" ID="ID_1904669959" MODIFIED="1681250693486" TEXT="separat">
|
<node CREATED="1681250688531" ID="ID_1904669959" MODIFIED="1681511427227" TEXT="separat">
|
||||||
|
<icon BUILTIN="button_cancel"/>
|
||||||
<node CREATED="1681250972125" ID="ID_492221110" MODIFIED="1681250991302" TEXT="ein separater Dispatcher-Mechanismus konstruiert für jeden »chunk« eine Pipeline"/>
|
<node CREATED="1681250972125" ID="ID_492221110" MODIFIED="1681250991302" TEXT="ein separater Dispatcher-Mechanismus konstruiert für jeden »chunk« eine Pipeline"/>
|
||||||
<node CREATED="1681251006417" ID="ID_115424466" MODIFIED="1681251032211" TEXT="der Planungs-Job konsumiert und wertet diese aus und generiert Jobs"/>
|
<node CREATED="1681251006417" ID="ID_115424466" MODIFIED="1681251032211" TEXT="der Planungs-Job konsumiert und wertet diese aus und generiert Jobs"/>
|
||||||
<node CREATED="1681251047923" ID="ID_1020628588" MODIFIED="1681251058990" TEXT="die Limitierung auf einen Chunk steckt in der Pipeline selber"/>
|
<node CREATED="1681251047923" ID="ID_1020628588" MODIFIED="1681251058990" TEXT="die Limitierung auf einen Chunk steckt in der Pipeline selber"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node COLOR="#435e98" CREATED="1681344133719" ID="ID_642967019" MODIFIED="1681424266741" TEXT="Diskussion">
|
<node COLOR="#435e98" CREATED="1681344133719" FOLDED="true" ID="ID_642967019" MODIFIED="1681424266741" TEXT="Diskussion">
|
||||||
<icon BUILTIN="info"/>
|
<icon BUILTIN="info"/>
|
||||||
<node CREATED="1681344155430" ID="ID_1775975727" MODIFIED="1681344193644" TEXT="Separation of Concerns ⟹ spricht für die reine lückenlose Job-Planung"/>
|
<node CREATED="1681344155430" ID="ID_1775975727" MODIFIED="1681344193644" TEXT="Separation of Concerns ⟹ spricht für die reine lückenlose Job-Planung"/>
|
||||||
<node CREATED="1681344197504" ID="ID_1110233377" MODIFIED="1681344469258" TEXT="das wirft das Problem auf: Invariante Time-Anchor ≡ alles bis dahin geregelt">
|
<node CREATED="1681344197504" ID="ID_1110233377" MODIFIED="1681344469258" TEXT="das wirft das Problem auf: Invariante Time-Anchor ≡ alles bis dahin geregelt">
|
||||||
|
|
@ -68972,6 +69006,7 @@
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1681422192014" ID="ID_686946668" MODIFIED="1681422278056" TEXT="⟹ Verhalten und Benachrichtigungen planen — ohne Dependencies explizit zu repräsentieren">
|
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1681422192014" ID="ID_686946668" MODIFIED="1681422278056" TEXT="⟹ Verhalten und Benachrichtigungen planen — ohne Dependencies explizit zu repräsentieren">
|
||||||
|
<arrowlink COLOR="#7c2e36" DESTINATION="ID_964028347" ENDARROW="Default" ENDINCLINATION="1221;-42;" ID="Arrow_ID_727391713" STARTARROW="None" STARTINCLINATION="-29;337;"/>
|
||||||
<font NAME="SansSerif" SIZE="12"/>
|
<font NAME="SansSerif" SIZE="12"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
|
|
@ -69013,7 +69048,7 @@
|
||||||
<node CREATED="1681423752401" ID="ID_1703609923" MODIFIED="1681423762827" TEXT="Fazit">
|
<node CREATED="1681423752401" ID="ID_1703609923" MODIFIED="1681423762827" TEXT="Fazit">
|
||||||
<icon BUILTIN="forward"/>
|
<icon BUILTIN="forward"/>
|
||||||
<node CREATED="1681423765518" ID="ID_1399425577" MODIFIED="1681424264776" TEXT="wir können komplett trennen und die Pipeline ist nur noch die reine Planung">
|
<node CREATED="1681423765518" ID="ID_1399425577" MODIFIED="1681424264776" TEXT="wir können komplett trennen und die Pipeline ist nur noch die reine Planung">
|
||||||
<linktarget COLOR="#68678a" DESTINATION="ID_1399425577" ENDARROW="Default" ENDINCLINATION="-321;0;" ID="Arrow_ID_26789445" SOURCE="ID_1404510345" STARTARROW="None" STARTINCLINATION="-353;107;"/>
|
<linktarget COLOR="#68678a" DESTINATION="ID_1399425577" ENDARROW="Default" ENDINCLINATION="-321;0;" ID="Arrow_ID_26789445" SOURCE="ID_1404510345" STARTARROW="None" STARTINCLINATION="-435;100;"/>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1681423785083" ID="ID_83395390" MODIFIED="1681423811754" TEXT="das JobPlanning muß ein Zeitfenster sichtbar machen; das genügt zur Planungs-Steuerung"/>
|
<node CREATED="1681423785083" ID="ID_83395390" MODIFIED="1681423811754" TEXT="das JobPlanning muß ein Zeitfenster sichtbar machen; das genügt zur Planungs-Steuerung"/>
|
||||||
<node CREATED="1681423881164" ID="ID_947885657" MODIFIED="1681423903640" TEXT="die Job-Deskriptor-Datenstruktur wird erweitert, so daß sie Scheduler-Actions beinhaltet"/>
|
<node CREATED="1681423881164" ID="ID_947885657" MODIFIED="1681423903640" TEXT="die Job-Deskriptor-Datenstruktur wird erweitert, so daß sie Scheduler-Actions beinhaltet"/>
|
||||||
|
|
@ -69126,8 +69161,83 @@
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
|
<node CREATED="1681511517424" ID="ID_1109133019" MODIFIED="1681511570233" TEXT="Aufteilung des eigentlichen Planungsvorgangs">
|
||||||
|
<node CREATED="1681511579310" ID="ID_1531444492" MODIFIED="1681511599329" TEXT="JobTicket stellt on-demand die Dependencies bereit"/>
|
||||||
|
<node CREATED="1681511631477" ID="ID_972174517" MODIFIED="1681511657301" TEXT="die Planungs-»Mechanik« wird in JobPlanning übersetzt"/>
|
||||||
|
<node CREATED="1681511601097" ID="ID_964028347" MODIFIED="1681511694671" TEXT="daraus werden aber direkt einzel-Beziehungen für den Scheduler gebaut">
|
||||||
|
<linktarget COLOR="#7c2e36" DESTINATION="ID_964028347" ENDARROW="Default" ENDINCLINATION="1221;-42;" ID="Arrow_ID_727391713" SOURCE="ID_686946668" STARTARROW="None" STARTINCLINATION="-29;337;"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681513765614" ID="ID_1274319760" MODIFIED="1681515077439" TEXT="Aufbau">
|
||||||
|
<icon BUILTIN="info"/>
|
||||||
|
<node CREATED="1681513770238" HGAP="30" ID="ID_1755305963" MODIFIED="1681514318606" TEXT="Play-Service">
|
||||||
|
<arrowlink COLOR="#5e5972" DESTINATION="ID_80916607" ENDARROW="Default" ENDINCLINATION="-60;-5;" ID="Arrow_ID_1602613098" STARTARROW="None" STARTINCLINATION="-23;5;"/>
|
||||||
|
<node CREATED="1681520404028" ID="ID_139747553" MODIFIED="1681520414735" TEXT="konfiguriert Modus und Timings"/>
|
||||||
|
<node CREATED="1681520421034" ID="ID_1253264357" MODIFIED="1681520442787" TEXT="verbindet ModelPorts ⟼ output-connection"/>
|
||||||
|
<node CREATED="1681520449253" ID="ID_616433102" MODIFIED="1681520472992" TEXT="resultierende RenderConfig ⟹ PlayProcess"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681513866097" HGAP="30" ID="ID_80916607" MODIFIED="1681514389653" TEXT="PlayProcess" VSHIFT="-1">
|
||||||
|
<arrowlink COLOR="#5e5972" DESTINATION="ID_1732223894" ENDARROW="Default" ENDINCLINATION="-60;-5;" ID="Arrow_ID_1129120203" STARTARROW="None" STARTINCLINATION="-23;5;"/>
|
||||||
|
<linktarget COLOR="#5e5972" DESTINATION="ID_80916607" ENDARROW="Default" ENDINCLINATION="-60;-5;" ID="Arrow_ID_1602613098" SOURCE="ID_1755305963" STARTARROW="None" STARTINCLINATION="-23;5;"/>
|
||||||
|
<node CREATED="1681520521181" ID="ID_127137475" MODIFIED="1681520530807" TEXT="verwendet gegebenen Render-Configurator"/>
|
||||||
|
<node CREATED="1681520531323" ID="ID_741530178" MODIFIED="1681520580039" TEXT="erstellt daraus die Feeds + CalcStreams"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681513775661" HGAP="30" ID="ID_1732223894" MODIFIED="1681515122691" TEXT="Engine-Service">
|
||||||
|
<arrowlink COLOR="#5e5972" DESTINATION="ID_1709285340" ENDARROW="Default" ENDINCLINATION="-55;-7;" ID="Arrow_ID_1166695691" STARTARROW="None" STARTINCLINATION="-42;8;"/>
|
||||||
|
<linktarget COLOR="#5e5972" DESTINATION="ID_1732223894" ENDARROW="Default" ENDINCLINATION="-60;-5;" ID="Arrow_ID_1129120203" SOURCE="ID_80916607" STARTARROW="None" STARTINCLINATION="-23;5;"/>
|
||||||
|
<node CREATED="1681520606402" ID="ID_833200775" MODIFIED="1681520624991" TEXT="Initiiert CalcStream(s)"/>
|
||||||
|
<node CREATED="1681520779187" ID="ID_809350382" MODIFIED="1681520811410" TEXT="verdrahtet dazu einen Dispatcher"/>
|
||||||
|
<node CREATED="1681520822876" ID="ID_4022163" MODIFIED="1681521853518" TEXT="erstellt ein RenderDrive mit Output"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681513782908" HGAP="30" ID="ID_1709285340" MODIFIED="1681515121003" TEXT="CalcStream">
|
||||||
|
<arrowlink COLOR="#5e5972" DESTINATION="ID_1418303343" ENDARROW="Default" ENDINCLINATION="-60;-5;" ID="Arrow_ID_1246156345" STARTARROW="None" STARTINCLINATION="-23;5;"/>
|
||||||
|
<linktarget COLOR="#5e5972" DESTINATION="ID_1709285340" ENDARROW="Default" ENDINCLINATION="-55;-7;" ID="Arrow_ID_1166695691" SOURCE="ID_1732223894" STARTARROW="None" STARTINCLINATION="-42;8;"/>
|
||||||
|
<node CREATED="1681520869358" ID="ID_248036437" MODIFIED="1681521862197" TEXT="betreibt den RenderDrive"/>
|
||||||
|
<node CREATED="1681520874613" ID="ID_1197599470" MODIFIED="1681520883624" TEXT="dieser ist intern mit dem Dispatcher verdrahtet"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681513790253" HGAP="30" ID="ID_1418303343" MODIFIED="1681515151463" TEXT="Dispatcher">
|
||||||
|
<arrowlink COLOR="#5e5972" DESTINATION="ID_786643460" ENDARROW="Default" ENDINCLINATION="-60;-5;" ID="Arrow_ID_876462297" STARTARROW="None" STARTINCLINATION="-29;7;"/>
|
||||||
|
<linktarget COLOR="#5e5972" DESTINATION="ID_1418303343" ENDARROW="Default" ENDINCLINATION="-60;-5;" ID="Arrow_ID_1246156345" SOURCE="ID_1709285340" STARTARROW="None" STARTINCLINATION="-23;5;"/>
|
||||||
|
<node CREATED="1681520888910" ID="ID_1891724948" MODIFIED="1681520896702" TEXT="ist angesiedelt in der Fixture"/>
|
||||||
|
<node CREATED="1681520912952" ID="ID_1717997829" MODIFIED="1681520920398" TEXT="bietet Anbindung an ein Frame-Grid"/>
|
||||||
|
<node CREATED="1681520921575" ID="ID_1652151815" MODIFIED="1681520933542" TEXT="bietet Anbindung an die JobTicket(s)"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681513796795" HGAP="30" ID="ID_786643460" MODIFIED="1681521871090" TEXT="RenderDrive">
|
||||||
|
<arrowlink COLOR="#5e5972" DESTINATION="ID_947997771" ENDARROW="Default" ENDINCLINATION="-60;-5;" ID="Arrow_ID_364168275" STARTARROW="None" STARTINCLINATION="-24;5;"/>
|
||||||
|
<linktarget COLOR="#5e5972" DESTINATION="ID_786643460" ENDARROW="Default" ENDINCLINATION="-60;-5;" ID="Arrow_ID_876462297" SOURCE="ID_1418303343" STARTARROW="None" STARTINCLINATION="-29;7;"/>
|
||||||
|
<node CREATED="1681520948109" ID="ID_1974741811" MODIFIED="1681520958397" TEXT="der aktive Nutzer des Dispatcher-Interfaces"/>
|
||||||
|
<node CREATED="1681520997813" ID="ID_1498779054" MODIFIED="1681521034522" TEXT="re-aktiviert sich fortlaufend selbst"/>
|
||||||
|
<node CREATED="1681521035833" ID="ID_744901458" MODIFIED="1681521051722" TEXT="ist verdrahtet mit der EngineFacade"/>
|
||||||
|
<node CREATED="1681521090001" ID="ID_1206046554" MODIFIED="1681521101922" TEXT="erstellt und betreibt die JobPlanning-Pipeline"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681513815536" HGAP="30" ID="ID_947997771" MODIFIED="1681515143216" TEXT="JobPlanning">
|
||||||
|
<arrowlink COLOR="#5e5972" DESTINATION="ID_839385817" ENDARROW="Default" ENDINCLINATION="-60;-5;" ID="Arrow_ID_1889540359" STARTARROW="None" STARTINCLINATION="-23;5;"/>
|
||||||
|
<linktarget COLOR="#5e5972" DESTINATION="ID_947997771" ENDARROW="Default" ENDINCLINATION="-60;-5;" ID="Arrow_ID_364168275" SOURCE="ID_786643460" STARTARROW="None" STARTINCLINATION="-24;5;"/>
|
||||||
|
<node CREATED="1681521107332" ID="ID_764418758" MODIFIED="1681521118625" TEXT="konkrete StateCore mit allen aktiven Verdrahtungen"/>
|
||||||
|
<node CREATED="1681521122833" ID="ID_479512654" MODIFIED="1681521129047" TEXT="wird wie ein Cursor navigiert"/>
|
||||||
|
<node CREATED="1681521246771" ID="ID_1361044565" MODIFIED="1681521267392" TEXT="bewegt sich auf Basis von JobTicket-Konfigurationen"/>
|
||||||
|
<node CREATED="1681521294153" ID="ID_718588107" MODIFIED="1681521306565" TEXT="Mittel der Bewegung ist der JobTIcket::ExplorationState"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681513818806" HGAP="30" ID="ID_839385817" MODIFIED="1681514365078" TEXT="JobTicket">
|
||||||
|
<linktarget COLOR="#5e5972" DESTINATION="ID_839385817" ENDARROW="Default" ENDINCLINATION="-60;-5;" ID="Arrow_ID_1889540359" SOURCE="ID_947997771" STARTARROW="None" STARTINCLINATION="-23;5;"/>
|
||||||
|
<node CREATED="1681521333950" ID="ID_1882410873" MODIFIED="1681521341316" TEXT="ist ein passiver Bauplan"/>
|
||||||
|
<node CREATED="1681521341799" ID="ID_1831867258" MODIFIED="1681521349882" TEXT="wird on-demand konkretisiert"/>
|
||||||
|
<node CREATED="1681521357484" ID="ID_633522131" MODIFIED="1681521366470" TEXT="kolaboriert mit einem aktiven ExplorationState"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1681168811429" ID="ID_72728251" MODIFIED="1681168821401" TEXT="Aufräum-Arbeiten">
|
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1681168811429" ID="ID_72728251" MODIFIED="1681168821401" TEXT="Aufräum-Arbeiten">
|
||||||
<icon BUILTIN="bell"/>
|
<icon BUILTIN="bell"/>
|
||||||
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681519830697" ID="ID_1168919012" MODIFIED="1681519846021" TEXT="Nomenklatur unscharf">
|
||||||
|
<icon BUILTIN="messagebox_warning"/>
|
||||||
|
<node CREATED="1681519851664" ID="ID_1426982855" MODIFIED="1681519854742" TEXT="Engine-Service">
|
||||||
|
<node CREATED="1681519855695" ID="ID_1479404578" MODIFIED="1681519922674" TEXT="„die Renderengine“ ⟷ »renderConfig«"/>
|
||||||
|
<node CREATED="1681519892562" ID="ID_1833190140" MODIFIED="1681519916866" TEXT="die gleiche Closure heißt aber auch »engineCallback«"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681596404095" ID="ID_582234271" MODIFIED="1681596416421" TEXT="„nominal time“">
|
||||||
|
<node CREATED="1681596418090" ID="ID_1704128775" MODIFIED="1681596439782" TEXT="die Bedeutung von „nominal“ ist zweifelhaft"/>
|
||||||
|
<node CREATED="1681596470078" ID="ID_184267509" MODIFIED="1681596498936" TEXT="es ist nicht »wall clock time« — aber welche Zeitachse ist es dann?"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
<node CREATED="1681168823213" ID="ID_70139544" MODIFIED="1681168829891" TEXT="LinkedElements">
|
<node CREATED="1681168823213" ID="ID_70139544" MODIFIED="1681168829891" TEXT="LinkedElements">
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681168834655" ID="ID_775810104" MODIFIED="1681168886034" TEXT="Kompatibilität mit STL verifizieren">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681168834655" ID="ID_775810104" MODIFIED="1681168886034" TEXT="Kompatibilität mit STL verifizieren">
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
|
@ -69247,9 +69357,183 @@
|
||||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1681007034731" ID="ID_380471864" MODIFIED="1681007071540" TEXT="Implementierung (dispatcher-table) nur gestubbed">
|
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1681007034731" ID="ID_380471864" MODIFIED="1681007071540" TEXT="Implementierung (dispatcher-table) nur gestubbed">
|
||||||
<icon BUILTIN="bell"/>
|
<icon BUILTIN="bell"/>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681425423695" ID="ID_1928295133" MODIFIED="1681426106281" TEXT="Reorganisation : CalcDriver verwenden">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681425423695" ID="ID_1928295133" MODIFIED="1681685384037" TEXT="Reorganisation : RenderDrive verwenden">
|
||||||
<linktarget COLOR="#f4fec9" DESTINATION="ID_1928295133" ENDARROW="Default" ENDINCLINATION="-1068;-69;" ID="Arrow_ID_362199078" SOURCE="ID_1888344503" STARTARROW="None" STARTINCLINATION="1381;58;"/>
|
<linktarget COLOR="#f4fec9" DESTINATION="ID_1928295133" ENDARROW="Default" ENDINCLINATION="-1068;-69;" ID="Arrow_ID_362199078" SOURCE="ID_1888344503" STARTARROW="None" STARTINCLINATION="1381;58;"/>
|
||||||
|
<linktarget COLOR="#ffe4c9" DESTINATION="ID_1928295133" ENDARROW="Default" ENDINCLINATION="-724;353;" ID="Arrow_ID_1773297165" SOURCE="ID_845968912" STARTARROW="None" STARTINCLINATION="-257;23;"/>
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
<node CREATED="1681597653622" ID="ID_1608883275" MODIFIED="1681597683317" TEXT="Eigenschaften">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
...erschlossen aus den bestehenden Strukturen + der neuen Intention
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
<icon BUILTIN="idea"/>
|
||||||
|
<node COLOR="#5b280f" CREATED="1681597684802" ID="ID_1406063015" MODIFIED="1681683228188" TEXT="kleines Value-Parameter-Objekt">
|
||||||
|
<icon BUILTIN="button_cancel"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681598452915" ID="ID_573477354" MODIFIED="1681598473868" TEXT="ist der aktive Kern im Calcstream"/>
|
||||||
|
<node CREATED="1681598513826" ID="ID_1817819165" MODIFIED="1681598599379" TEXT="konstituiert eine Prozeß-Instanz-Identität"/>
|
||||||
|
<node CREATED="1681683275337" ID="ID_1515003010" MODIFIED="1681683297990" TEXT="berwirkt repetitive Selbst-Aktivierung"/>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1681598877348" ID="ID_789757597" MODIFIED="1681683172391" TEXT="zu klären">
|
||||||
|
<icon BUILTIN="yes"/>
|
||||||
|
<node CREATED="1681598885498" ID="ID_1614960356" MODIFIED="1681598899763" TEXT="Redundanz / Überschneidung mit dem CalcStream">
|
||||||
|
<node CREATED="1681598901535" ID="ID_1286823970" MODIFIED="1681599043639" TEXT="beide haben auffällig ähnliche Eigenschaften">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
repräsentieren eine parameter-basierte Instanz-Identität
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
sind jeweils voll kopierbare Wertobjekte
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
benötigen zudem eine Dependency-Injection
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
gespeichert im Play-Process und damit in der »Prozess-Tafel«
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681599056122" ID="ID_458680948" MODIFIED="1681646642507" TEXT="Unterscheidung aus logischen/semantsichen Gründen eingeführt">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Der CalcStream ist eben das, also ein Organisationsmerkmal bzw. die Identität eines Teilprozesses
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Der RenderDrive soll ein zyklischer Mechanismus sein, und als JobFunctor genutzt werden
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681599191305" ID="ID_1167449829" MODIFIED="1681599208482" TEXT="benötigte Dependency-Injection ">
|
||||||
|
<node CREATED="1681599223716" ID="ID_86738790" MODIFIED="1681599346318" TEXT="Timings (impliziert Frame-Grid)"/>
|
||||||
|
<node CREATED="1681599210089" ID="ID_684433972" MODIFIED="1681599218026" TEXT="Zugang zum Dispatcher"/>
|
||||||
|
<node CREATED="1681599257945" ID="ID_733064533" MODIFIED="1681599268652" TEXT="Zugang zum Scheduler"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681646460442" ID="ID_866977884" MODIFIED="1681646477449" TEXT="multiplicity and usage structure">
|
||||||
|
<node CREATED="1681646502158" ID="ID_1554914113" MODIFIED="1681646512969" TEXT="die Planungs-Pipeline wird strikt sequentiell bespielt"/>
|
||||||
|
<node CREATED="1681646532062" ID="ID_1383559792" MODIFIED="1681646551375" TEXT="es gibt nur einen Drive pro CalcStream"/>
|
||||||
|
<node CREATED="1681646829918" ID="ID_284324155" MODIFIED="1681646835657" TEXT="nur minimlae bewegliche Teile"/>
|
||||||
|
<node CREATED="1681646836533" ID="ID_1000053188" MODIFIED="1681646846261" TEXT="könnte im Heap sitzen">
|
||||||
|
<icon BUILTIN="idea"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681646866174" ID="ID_246853832" MODIFIED="1681646885323" TEXT="⟹ Struktur">
|
||||||
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681646891090" ID="ID_1766076946" MODIFIED="1681683127682" TEXT="non-copyable Heap-alloziert">
|
||||||
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681646907319" ID="ID_682236351" MODIFIED="1681683367234" TEXT="wird per smart-ptr gemanaged">
|
||||||
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681683094086" ID="ID_1384696790" MODIFIED="1681690034337" TEXT="beherbergt die Planungs-Pipeline">
|
||||||
|
<arrowlink COLOR="#fd4259" DESTINATION="ID_1735556854" ENDARROW="Default" ENDINCLINATION="20;-71;" ID="Arrow_ID_91051045" STARTARROW="None" STARTINCLINATION="-206;16;"/>
|
||||||
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681646916186" ID="ID_806901618" MODIFIED="1681683127683" TEXT="wird erstellt aus">
|
||||||
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
<node CREATED="1681646926897" ID="ID_1301053260" MODIFIED="1681646934364" TEXT="CalcStream-Kenndaten">
|
||||||
|
<node CREATED="1681646935872" ID="ID_1191393929" MODIFIED="1681646959241" TEXT="Timings&"/>
|
||||||
|
<node CREATED="1681646946919" ID="ID_1576152420" MODIFIED="1681646966921" TEXT="ModelPort + channel"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681646971664" ID="ID_524941672" MODIFIED="1681646985378" TEXT="Environment-Resourcen">
|
||||||
|
<node CREATED="1681646987124" ID="ID_147954437" MODIFIED="1681647202903" TEXT="bereitgestellt für Render-Quality">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
ein Play/Renderprozeß wird mit einer definiten Quality-of-Service-Strategie aufgebaut; daraus ergibt sich implizit, was benötigt wird — und das ist ein sehr erweiterungsfähiges Konzept: beispielsweise könnte man das auf die Verfügbarkeit gewisser Klassen von Mediendaten erweitern, und es müßten somit nicht alle Daten immer direkt greifbar sein
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681646998860" ID="ID_375377074" MODIFIED="1681647365953" TEXT="garantiert Verfügbarkeit der Ressourcen">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
mit der Erstellung eines CalcStream geht die Zusage einher, alle benötigten Resourcen tatsächlich im geforderten Maß verfügbar zu haben; diese Zusage mündet in die Übersetzung in eine abstrahierte RenderEnvironmentClosure; dahinter können sehr weitreichende Dispositionen verborgen sein, z.B. verteilte Resourcen in einem Render-Cluster/Netwerk-Setup, oder spezielle Hardware
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681647059168" ID="ID_403042221" MODIFIED="1681647527409" TEXT="steteless + fail-Fast">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
die Zusage ist verbindlich und ohne zeitliche Parametrisierung; sollte eine Resource wegbrechen, so läßt man sofort den btr. Renderprozeß zusammenbrechen und markiert ihn als schadhaft
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681647531976" ID="ID_438278550" MODIFIED="1681683133041" TEXT="ist selber ein JobFunktor">
|
||||||
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1681647578298" ID="ID_328838794" MODIFIED="1681647594158" TEXT="usage-constraints werden grundsätzlich implizit gehandhabt">
|
||||||
|
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||||
|
<icon BUILTIN="yes"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681647609917" ID="ID_1941277429" MODIFIED="1681647652741" TEXT="hat bereits alle operativen Dependencies fertig injiziert"/>
|
||||||
|
<node CREATED="1681647654353" ID="ID_1685443734" MODIFIED="1681647671007" TEXT="einziger beweglicher Parameter: die Start-Framenummer"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1681689961426" ID="ID_1735556854" MODIFIED="1681690034338" TEXT="was wird dann aber aus dem Dispatcher?">
|
||||||
|
<linktarget COLOR="#fd4259" DESTINATION="ID_1735556854" ENDARROW="Default" ENDINCLINATION="20;-71;" ID="Arrow_ID_91051045" SOURCE="ID_1384696790" STARTARROW="None" STARTINCLINATION="-206;16;"/>
|
||||||
|
<icon BUILTIN="help"/>
|
||||||
|
<node CREATED="1681689971576" ID="ID_497495407" MODIFIED="1681690040742">
|
||||||
|
<richcontent TYPE="NODE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
dieser wird nun mehr und mehr <i>entkernt....</i>
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681690048013" ID="ID_800389319" MODIFIED="1681690224577" TEXT="sieht aktuell mehr aus wie eine Facade zur Fixture">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
...und das kommt nicht von ungefähr; schon im Entwurf von 2012 sollte ja <font color="#331eb5" face="Monospaced">Dispatcher</font>  ein Interface sein, und die aktuelle Implementierung wäre eine  <font color="#331eb5" face="Monospaced">DispatchTable</font>, die direkt in der Fixture angesiedelt und gemanaged würde
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1681690087200" ID="ID_14312341" MODIFIED="1681690107889" TEXT="folglich wird dieser Teil komplett entkoppelt von »der Engine«"/>
|
||||||
|
<node CREATED="1681690260176" ID="ID_1829278703" MODIFIED="1681690292694" TEXT="aber er sollte per DependencyInjection eingebracht werden (‣ EngineService)"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
|
|
@ -69429,10 +69713,25 @@
|
||||||
</html></richcontent>
|
</html></richcontent>
|
||||||
<icon BUILTIN="idea"/>
|
<icon BUILTIN="idea"/>
|
||||||
</node>
|
</node>
|
||||||
|
<node CREATED="1681685256388" ID="ID_845968912" MODIFIED="1681685407179" TEXT="besitzt/verwaltet den RenderDrive">
|
||||||
|
<arrowlink COLOR="#ffe4c9" DESTINATION="ID_1928295133" ENDARROW="Default" ENDINCLINATION="-724;353;" ID="Arrow_ID_1773297165" STARTARROW="None" STARTINCLINATION="-257;23;"/>
|
||||||
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681685287808" ID="ID_439004499" MODIFIED="1681685335962" TEXT="TODO: non-copyable?">
|
||||||
|
<arrowlink COLOR="#e0804f" DESTINATION="ID_1313231227" ENDARROW="Default" ENDINCLINATION="2513;164;" ID="Arrow_ID_861540006" STARTARROW="None" STARTINCLINATION="676;-84;"/>
|
||||||
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1681341894866" ID="ID_94172116" MODIFIED="1681341900624" TEXT="RenderEnvironmentClosure">
|
<node CREATED="1681341894866" ID="ID_94172116" MODIFIED="1681341900624" TEXT="RenderEnvironmentClosure">
|
||||||
<node CREATED="1681341905668" ID="ID_432577558" MODIFIED="1681341915150" TEXT="das ist die »abstrahierte Render-Engine«"/>
|
<node CREATED="1681341905668" ID="ID_432577558" MODIFIED="1681341915150" TEXT="das ist die »abstrahierte Render-Engine«"/>
|
||||||
</node>
|
</node>
|
||||||
|
<node CREATED="1681594252245" ID="ID_1719102613" MODIFIED="1681594256245" TEXT="InvocationInstanceID">
|
||||||
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681594257143" ID="ID_689625560" MODIFIED="1681594270271" TEXT="Bedeutung klären">
|
||||||
|
<icon BUILTIN="bell"/>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1681594271596" ID="ID_963803611" MODIFIED="1681594283643" TEXT="in welchem Scope ist sie eindeutig?">
|
||||||
|
<icon BUILTIN="help"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1680563509728" ID="ID_1883500842" MODIFIED="1680563511567" TEXT="Scheduler">
|
<node CREATED="1680563509728" ID="ID_1883500842" MODIFIED="1680563511567" TEXT="Scheduler">
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue