refactor(streaming): centralize world reveal lifetime

Compose destination readiness and lifecycle telemetry behind one App-layer coordinator so login and portal begin, preparation, materialization, visibility, completion, and cancellation cannot drift apart in GameWindow wiring.
This commit is contained in:
Erik 2026-07-20 23:33:50 +02:00
parent 68578fa5fa
commit a4ef57885c
4 changed files with 213 additions and 30 deletions

View file

@ -239,7 +239,8 @@ src/
Streaming/
StreamingController.cs -> done
GpuWorldState.cs -> done
WorldRevealReadinessBarrier.cs -> shared login/portal reveal owner
WorldRevealCoordinator.cs -> shared login/portal lifetime owner
WorldRevealReadinessBarrier.cs -> canonical destination predicate
Input/
PlayerMovementController.cs -> active movement driver
Plugins/
@ -708,14 +709,16 @@ partially hydrated cell membership or shell placement to the renderer.
### World-reveal readiness ownership
`WorldRevealReadinessBarrier` is the single App-layer owner of the edge that
allows normal world geometry to become visible at initial login or after a
portal. It joins `StreamingController`/`GpuWorldState` static-mesh publication,
`WbDrawDispatcher` composite-texture warmup, and `PhysicsEngine` destination
residency. Login's sky-only gate and portal-space transit consume the same
predicate; they differ only in presentation. Composite preparation advances
after `WbMeshAdapter.Tick` on the render thread, never from the streaming
worker. This is acdream's asynchronous equivalent of retail
`WorldRevealCoordinator` is the single App-layer owner of each login or portal
reveal lifetime. It composes the canonical `WorldRevealReadinessBarrier` with
generation-scoped lifecycle observation, so begin, preparation, readiness,
materialization, world visibility, completion, and cancellation cannot be
wired independently. The barrier joins `StreamingController`/`GpuWorldState`
static-mesh publication, `WbDrawDispatcher` composite-texture warmup, and
`PhysicsEngine` destination residency. Login's sky-only gate and portal-space
transit consume the same predicate; they differ only in presentation.
Composite preparation advances after `WbMeshAdapter.Tick` on the render
thread, never from the streaming worker. This is acdream's asynchronous equivalent of retail
`SmartBox::UseTime` holding position completion while
`CellManager::blocking_for_cells` is set.