Step 6
This commit is contained in:
@@ -9,7 +9,7 @@ Phase checklist:
|
||||
- [x] Split `RuntimeHost`
|
||||
- [x] Finish live-state and service-facing coordination
|
||||
- [x] Make the render thread the sole GL owner
|
||||
- [ ] Refactor live state layering into an explicit composition model
|
||||
- [x] Refactor live state layering into an explicit composition model
|
||||
- [ ] Move persistence onto a background snapshot writer
|
||||
- [ ] Make DeckLink/backend lifecycle explicit with a state machine
|
||||
- [ ] Add structured health, telemetry, and operational reporting
|
||||
@@ -20,7 +20,8 @@ Checklist note:
|
||||
- The checked Phase 2 item means the internal event model substrate is complete enough for later phases: the typed event vocabulary, app-owned dispatcher, coalesced event pump, reload bridge events, production bridges, and pure event tests are in place. Remaining items in [PHASE_2_INTERNAL_EVENT_MODEL_DESIGN.md](/c:/Users/Aiden/Documents/GitHub/video-shader-toys/docs/PHASE_2_INTERNAL_EVENT_MODEL_DESIGN.md) are narrow follow-ups, mainly completion/failure observations and later replacement of the runtime-store poll fallback with real file-watch events.
|
||||
- The checked Phase 3 item means the render-facing state path now has named live-state, composition, frame-state, resolver, and service-bridge boundaries. `OpenGLComposite::renderEffect()` is reduced to runtime work, frame input construction, and frame rendering.
|
||||
- The checked Phase 4 item means normal runtime GL work is now owned by a dedicated `RenderEngine` render thread. Input upload, output render, preview, screenshot capture, render-local resets, and shader application enter through render-thread queue/request paths instead of caller-thread context borrowing. The remaining output timing risk is callback-coupled synchronous output production, which is intentionally tracked for the later DeckLink/backend lifecycle and playout-queue work.
|
||||
- It does not mean the whole app is fully extracted. Deeper live-state layering, background persistence, backend lifecycle/playout queue policy, and richer telemetry continue through later phases.
|
||||
- The checked Phase 5 item means persisted, committed/session, transient automation, and render-local state are explicitly named. `CommittedLiveState` physically owns current session layer state, `RuntimeLiveState` owns transient OSC overlays, `RenderStateComposer` consumes a layered input contract, and reset/reload/preset overlay invalidation is centralized and covered by non-GL tests.
|
||||
- It does not mean the whole app is fully extracted. Background persistence, backend lifecycle/playout queue policy, and richer telemetry continue through later phases.
|
||||
|
||||
## Timing Review
|
||||
|
||||
@@ -125,30 +126,31 @@ Recommended direction:
|
||||
- prefer degraded runtime states over modal failure handling where possible
|
||||
- add a rolling log file for operational troubleshooting
|
||||
|
||||
### 5. Live OSC overlay and persisted state are still separate concepts without a formal model
|
||||
### 5. Live OSC overlay and persisted state now have an explicit layering model
|
||||
|
||||
The current design works better now, but it still relies on hand-managed reconciliation between:
|
||||
Phase 5 formalized the previous hand-managed reconciliation between:
|
||||
|
||||
- persisted/committed parameter state in `RuntimeStore`
|
||||
- transient OSC overlay state in `RenderEngine`
|
||||
- base persisted state owned by `RuntimeStore` serialization/preset IO
|
||||
- committed session state owned by `CommittedLiveState`
|
||||
- transient OSC overlay state owned by `RuntimeLiveState`
|
||||
- render-local temporal, feedback, preview, screenshot, and playout state owned by `RenderEngine`
|
||||
|
||||
Relevant code:
|
||||
|
||||
- [RenderEngine.h](/c:/Users/Aiden/Documents/GitHub/video-shader-toys/apps/LoopThroughWithOpenGLCompositing/gl/RenderEngine.h:18)
|
||||
- [CommittedLiveState.h](/c:/Users/Aiden/Documents/GitHub/video-shader-toys/apps/LoopThroughWithOpenGLCompositing/runtime/live/CommittedLiveState.h:1)
|
||||
- [RuntimeLiveState.h](/c:/Users/Aiden/Documents/GitHub/video-shader-toys/apps/LoopThroughWithOpenGLCompositing/runtime/live/RuntimeLiveState.h:1)
|
||||
- [RenderStateComposer.h](/c:/Users/Aiden/Documents/GitHub/video-shader-toys/apps/LoopThroughWithOpenGLCompositing/runtime/live/RenderStateComposer.h:1)
|
||||
- [RuntimeStateLayerModel.h](/c:/Users/Aiden/Documents/GitHub/video-shader-toys/apps/LoopThroughWithOpenGLCompositing/runtime/live/RuntimeStateLayerModel.h:1)
|
||||
|
||||
Recommended direction:
|
||||
Current direction:
|
||||
|
||||
Formalize three layers of state:
|
||||
- render resolves values with a named composition rule:
|
||||
|
||||
- base persisted state
|
||||
- operator/UI committed state
|
||||
- transient live automation overlay
|
||||
- `final = base + committed + transient`
|
||||
|
||||
Then render can always resolve:
|
||||
|
||||
- `final = base + committed + transient`
|
||||
|
||||
That avoids special-case sync behavior becoming scattered across the code.
|
||||
- settled OSC commits are session-only by default and do not request persistence unless policy explicitly opts in
|
||||
- reset, reload, preset load, and shader compatibility changes prune or clear transient overlays at the live-state boundary
|
||||
- render-local temporal and feedback resources remain outside the parameter layering model
|
||||
|
||||
### 6. DeckLink lifecycle could be modeled more explicitly
|
||||
|
||||
@@ -542,11 +544,14 @@ Dedicated design note:
|
||||
|
||||
- [PHASE_5_LIVE_STATE_LAYERING_DESIGN.md](/c:/Users/Aiden/Documents/GitHub/video-shader-toys/docs/PHASE_5_LIVE_STATE_LAYERING_DESIGN.md)
|
||||
|
||||
Recommended layers:
|
||||
Status:
|
||||
|
||||
- base persisted state
|
||||
- operator-committed live state
|
||||
- transient automation overlay
|
||||
- complete for the current architecture
|
||||
- `RuntimeStateLayerModel` names the state categories
|
||||
- `CommittedLiveState` physically owns committed/session layer state
|
||||
- `RenderStateComposer` consumes `LayeredRenderStateInput`
|
||||
- `RuntimeLiveState` owns transient overlay smoothing, generation, commit settlement, and compatibility pruning
|
||||
- settled OSC commits update session state without requesting persistence by default
|
||||
|
||||
Render should derive final values from a clear composition rule such as:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user