diff --git a/doc/devel/uml/BoUML-diagrams.txt b/doc/devel/uml/BoUML-diagrams.txt index 72ea556da..384c8f0d7 100644 --- a/doc/devel/uml/BoUML-diagrams.txt +++ b/doc/devel/uml/BoUML-diagrams.txt @@ -50,5 +50,4 @@ On occasion, we'll replace them by drawings from our current UML model. 133637: classdiagram 143877 "Player Entities" 133637: objectdiagram 144005 "Play Process Structure" 133637: sequencediagram 145157 "output data exchange" -133637: classdiagram 151685 "Player Output" 128773: classdiagram 158213 "UIBus" diff --git a/doc/devel/uml/OutputSlot_components.svg b/doc/devel/uml/OutputSlot_components.svg new file mode 100644 index 000000000..6f663e34f --- /dev/null +++ b/doc/devel/uml/OutputSlot_components.svg @@ -0,0 +1,7277 @@ + + + OutputSlot components + Generated with Qt + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + «for each channel» + + + + + + + + + + + + + + + + + + «smart handle» + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + «active» + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BufferProxyAdaptor + + + + + + + + + + + + + + + buildDescriptor() + + + + + + + + lockBuffer() + + + + + + + + + + + + + + + + BufferProvider + + + + + + + + + + + + + + + getDescriptor() + + + + + + + + lockBuffer() + + + + + + + + + + + + + + + + SpecificOutputSlot + + + + + + + + + + + + + + + buildState() + + + + + + + + + + + + + + + + SpecificConnection + + + + + + + + + + + + + + + + + + + + + + + BuffHandle + + + + + + + + + + + + + + + emit() + + + + + + + + release() + + + + + + + + + + + + + + + + Connection + + + + + + + + + + + + + + + claimBufferFor() + + + + + + + + transfer() + + + + + + + + shutDown() + + + + + + + + + + + + + + + + OutputSlot + + + + + + + + + + + + state_ + + + + + + + + + + + + + + isFree() + + + + + + + + allocate() + + + + + + + + + + + + + + + + DataSink + + + + + + + + + + + + + + + lockBufferFor() + + + + + + + + + + + + + + + + Allocation + + + + + + + + + + + + + + + getOpenedSinks() + + + + + + + + timingConstraints() + + + + + + + + isActive() + + + + + + + + + + + + + + + + + + + CON + + + + + + + + AllocState + + + + + + + + + + + + connections_ + + + + + + + + + + + + + + AllocState() «constructor» + + + + + + + + connectOutputSink() + + + + + + + + shutdownConnection() + + + + + + + + + + + + Actual Output Driver + + + + + + Output Management + + + + + + + + + + + + Knowledge specific + + + + + + + for this kind of + + + + + + + output driver + + + + + + + + + + + + + + + Client + + + + + + + front-end + + + + + + + + + + + OutputSlot components + + + + Ichthyostega + + + Lumiera documentation + + + + + + + + + + + + + diff --git a/doc/devel/uml/fig151685.png b/doc/devel/uml/fig151685.png deleted file mode 100644 index 77b41e446..000000000 Binary files a/doc/devel/uml/fig151685.png and /dev/null differ diff --git a/src/steam/play/render-configurator.cpp b/src/steam/play/render-configurator.cpp index 77be42c38..e1fe77104 100644 --- a/src/steam/play/render-configurator.cpp +++ b/src/steam/play/render-configurator.cpp @@ -79,7 +79,7 @@ namespace play { buildCalculationStreams (ModelPort port, OutputSlot& output) { OutputSlot::Allocation& activeOutputConnection = output.allocate(); - Timings nominalTimings = activeOutputConnection.getTimingConstraints() + Timings nominalTimings = activeOutputConnection.timingConstraints() .constrainedBy(playbackTimings_); return activateEngine (port, nominalTimings, activeOutputConnection, renderQuality_); diff --git a/src/vault/out/output-slot-connection.hpp b/src/vault/out/output-slot-connection.hpp index 990e43dee..a4d9220fd 100644 --- a/src/vault/out/output-slot-connection.hpp +++ b/src/vault/out/output-slot-connection.hpp @@ -141,7 +141,7 @@ namespace out { } Timings - getTimingConstraints() + timingConstraints() { UNIMPLEMENTED ("find out about timing constraints"); //////////////////////////TICKET #831 } diff --git a/src/vault/out/output-slot.hpp b/src/vault/out/output-slot.hpp index 16040df4b..8423a57f9 100644 --- a/src/vault/out/output-slot.hpp +++ b/src/vault/out/output-slot.hpp @@ -106,10 +106,10 @@ namespace out { class Allocation { public: - virtual OpenedSinks getOpenedSinks() =0; - virtual bool isActive() const =0; + virtual OpenedSinks getOpenedSinks() =0; + virtual Timings timingConstraints() =0; - virtual Timings getTimingConstraints() =0; + virtual bool isActive() const =0; ~Allocation(); ///< this is an interface }; diff --git a/uml/Lumiera.xmi b/uml/Lumiera.xmi index baf97402e..0d2da4fe3 100644 --- a/uml/Lumiera.xmi +++ b/uml/Lumiera.xmi @@ -35,6 +35,7 @@ + @@ -152,7 +153,7 @@ - + @@ -320,8 +321,179 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -426,9 +598,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -517,7 +727,7 @@ - + @@ -683,7 +893,7 @@ - + @@ -745,16 +955,13 @@ - + - - - @@ -775,8 +982,8 @@ - - + + @@ -816,7 +1023,7 @@ - + @@ -856,6 +1063,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/uml/README_UML.txt b/uml/README_UML.txt index c2d418b7b..151a0e07d 100644 --- a/uml/README_UML.txt +++ b/uml/README_UML.txt @@ -45,6 +45,15 @@ Some hints for working with the diagrams: identical to the Latin part in `Noto Sans'. - Disable display of package names, visibility scopes and signatures - Use a 5 x 5 grid for alignment +- do not use inner classes and do not use other elements of the model as parameter types! +- the automatic layout is inconsitent, lacks precision and can kick elements around aribrtarily; + unfortunately it can not be disabled; the only solution is to proceed gradually from element to element. +- Snap-to has numeric problems; need to zoom in and manually adjust lines to avoid jagged edges in PNG export +- Undo / Redo is broken and can totally mess up the layout + +Umbrello can save as SVG; some glitches can thus be cleaned-up with Inkscape afterwards. + +💡 save after each step and make a Git commit; frequently close and re-open the application. BoUML diff --git a/wiki/renderengine.html b/wiki/renderengine.html index 3beeb1677..93b013cf3 100644 --- a/wiki/renderengine.html +++ b/wiki/renderengine.html @@ -312,7 +312,7 @@ h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}
/*{{{*/
 * html .tiddler {height:1%;}
 
-body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}
+body {font-size:.8em; font-family:arial,helvetica; margin:0; padding:0;}
 
 h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
 h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
@@ -5157,7 +5157,7 @@ Thus the mapping is a copyable value object, using an associative array. It may
 First and foremost, mapping can be seen as a //functional abstraction.// As it's used at implementation level, encapsulation of detail types in't the primary concern, so it's a candidate for generic programming: For each of those use cases outlined above, a distinct mapping type is created by instantiating the {{{OutputMapping<DEF>}}} template with a specifically tailored definition context ({{{DEF}}}), which takes on the role of a strategy. Individual instances of this concrete mapping type may be default created and copied freely. This instantiation process includes picking up the concrete result type and building a functor object for resolving on the fly. Thus, in the way typical for generic programming, the more involved special details are moved out of sight, while being still in scope for the purpose of inlining. But there //is// a concern better to be encapsulated and concealed at the usage site, namely accessing the rules system. Thus mapping leads itself to the frequently used implementation pattern where there is a generic frontend as header, calling into opaque functions embedded within a separate compilation unit.
 
-
+
Within the Lumiera player and output subsystem, actually sending data to an external output requires to allocate an ''output slot''
 This is the central metaphor for the organisation of actual (system level) outputs; using this concept allows to separate and abstract the data calculation and the organisation of playback and rendering from the specifics of the actual output sink. Actual output possibilities (video in GUI window, video fullscreen, using a beamer, sound, Jack, rendering to file) can be added and removed dynamically from various components (Vault, Stage), all using the same resolution and mapping mechanisms (&rarr; OutputManagement)
 
@@ -5166,7 +5166,7 @@ Each OutputSlot is an unique and distinguishable entity. It corresponds explicit
 
 In order to be usable as //output sink,// an output slot needs to be //allocated,// i.e. tied to and locked for a specific client. At any time, there may be only a single client using a given output slot this way. To stress this point: output slots don't provide any kind of inherent mixing capability; any adaptation, mixing, overlaying and sharing needs to be done within the nodes network producing the output data fed to the slot. (in special cases, some external output capabilities -- e.g. the Jack audio connection system -- may still provide additional mixing capabilities, but that's beyond the scope of the Lumiera application)
 
-[>img[Outputslot implementation structures|uml/fig151685.png]]
+[>img[Outputslot implementation structures|uml/OutputSlot_components.svg]]
 Once allocated, the output slot returns a set of concrete ''sink handles'' (one for each physical channel expecting data). The calculating process feeds its results into those handles. Size and other characteristics of the data frames are assumed to be suitable, which typically won't be verified at that level anymore (but the sink handle provides a hook for assertions). Besides that, the allocation of an output slot reveals detailed ''timing expectations''. The client is required to comply to these [[timings|Timings]] when ''emitting'' data -- he's even required to provide a //current time specification,// alongside with the data. Based on this information, the output slot has the ability to handle timing failures gracefully; the concrete output slot implementation is expected to provide some kind of de-click or de-flicker facility, which kicks in automatically when a timing failure is detected.
 
 !!!usage and implementation
@@ -7235,7 +7235,7 @@ Later on we expect a distinct __query subsystem__ to emerge, presumably embeddin
 
 &rarr; QuantiserImpl
-
+
//Invoke and control the dependency and time based execution of  [[render jobs|RenderJob]]//
 The Scheduler acts as the central hub in the implementation of the RenderEngine and coordinates the //processing resources// of the application. Regarding architecture, the Scheduler is located in the Vault-Layer and //running// the Scheduler is equivalent to activating the »Vault Subsystem«. An EngineFaçade acts as entrance point, providing high-level render services to other parts of the application: [[render jobs|RenderJob]] can be activated under various timing and dependency constraints. Internally, the implementation is organised into two layers:
 ;Layer-2: Coordination
@@ -7265,7 +7265,7 @@ This leads to a »chaotic«, event-driven processing style without a central man
 &rarr; SchedulerProcessing
 
 !!!Performance
-Processing is not driven by a centralised algorithm, but rather stochastically by workers becoming available for further work. This allows for adaptation to a wide array of load patterns, but turns assessment of the Scheduler's capabilities and limitations into a challenging task. The speed and throughput of the processing are largely defined by the actual scheduler -- up to the point where the Scheduler is overloaded permanently and the //schedule slips away.// Based on that observation, a framework for [[Scheduler Load- and Performance-testing|SchedulerTest]] was^^{{red{12/2023 rather is about to be}}}^^ established.
+Processing is not driven by a centralised algorithm, but rather stochastically by workers becoming available for further work. This allows for adaptation to a wide array of load patterns, but turns assessment of the Scheduler's capabilities and limitations into a challenging task. The speed and throughput of the processing are largely defined by the actual scheduler -- up to the point where the Scheduler is overloaded permanently and the //schedule slips away.// Based on that observation, a framework for [[Scheduler Load- and Performance-testing|SchedulerTest]] was established.
 
 !!!Instructing the Scheduler
 The Scheduler is now considered an implementation-level facility with an interface specifically tailored at the JobPlanningPipeline: the [[»Render Activity Language«|RenderActivity]]. This //builder-style// setup allows to construct an ''~Activity-Term'' to model all the structural properties of an individual rendering invocation -- it is compriesed of a network of {{{Activity}}} records, which can be directly handled by the Scheduler.
diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm
index b7bb08ebe..fa42c6c07 100644
--- a/wiki/thinkPad.ichthyo.mm
+++ b/wiki/thinkPad.ichthyo.mm
@@ -137595,6 +137595,23 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
 
 
 
+
+
+
+
+
+  
+    
+  
+  
+    

+ es ist 1 KATASTROFE +

+ + +
+ +
@@ -167743,6 +167760,95 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo + + + + + + + + + + + + + + + + + + + +

+ es verschiebt Assoziationen und sogar benachbarte Klassen, oft in komplett irrsinniger Weise +

+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+ ...dann wandelt sich der Typ auch in Multiline; danach sollte man zunächst die inneren Punkte platzieren, erst zuletzt den Start/Endpunkt. Vorsicht, sobald man eines der verbundenen Objekte weiter editiert oder skaliert, greift wieder das automatische Layout ein +

+ + +
+
+ + + + + + +

+ als SVG exportieren und im Inkscape reparieren +

+ + +
+ + + + + + +

+ das ist besonders ärgerlich, denn das führt zu unscharfen Linien +

+ + +
+
+ + + + +