fix(streaming): preserve portal destination ownership
Detach old-world spatial ownership atomically, prioritize destination retirement dependencies, and reveal the viewport at the retail transition edge. Give private paperdoll views independent mesh ownership and retain dormant ACE entities so portal revisits preserve server objects without extending active GPU lifetimes.
This commit is contained in:
parent
2c848d4167
commit
823936ec31
57 changed files with 2551 additions and 324 deletions
|
|
@ -452,6 +452,13 @@ script creation. Its canonical materialized view remains stable across pending
|
|||
landblocks, while a separate visible-only view feeds radar, picking, status, and
|
||||
targeting. Raw server PhysicsState and the final state produced by retail's
|
||||
ordered Lighting/NoDraw/Hidden side effects are stored separately.
|
||||
When retail's 25-second leave-visibility deadline expires, active ownership
|
||||
still ends completely. The ACE adapter retains only the accepted
|
||||
`EntitySpawn` in `DormantLiveEntityStore`, because ACE can keep that GUID in
|
||||
`KnownObjects` and omit a later CreateObject on revisit. A matching landblock
|
||||
load re-enters the ordinary timestamp- and generation-gated hydration path;
|
||||
F747, a newer incarnation, or session reset removes the cold snapshot. Dormant
|
||||
records own no frame-time, physics, render, effect, audio, or GPU resource.
|
||||
`LiveEntityPresentationController` drains those accepted transitions only after
|
||||
the renderer/effect owner is ready: Hidden suppresses the retained root's mesh,
|
||||
collision, interaction, radar, and target eligibility while preserving the
|
||||
|
|
@ -735,9 +742,14 @@ liveness, and spatial reconciliation stop; world-space audio is silenced; UI,
|
|||
network/event/command delivery, portal presentation, destination streaming, and
|
||||
readiness continue. Canonical live records remain retained until physical
|
||||
teardown converges, so quiescence neither reconstructs server identity nor
|
||||
invents Hidden/UnHide transitions. Full-window and shared-origin retirement
|
||||
advance only from `StreamingController.Tick` through stable resident and
|
||||
per-owner entity/stage cursors on the frame's one meter.
|
||||
invents Hidden/UnHide transitions. A shared-origin recenter atomically removes
|
||||
the complete old spatial generation and captures one exact receipt per
|
||||
landblock before the origin changes. Expensive script, physics, render, and GL
|
||||
release then advances only from `StreamingController.Tick` through stable
|
||||
per-owner entity/stage cursors on the frame's one meter. Publication remains
|
||||
fenced only by an older receipt for the same canonical landblock; the active
|
||||
destination's exact receipt may advance ahead of unrelated cleanup without
|
||||
reordering the remaining FIFO.
|
||||
|
||||
Accepted publication is likewise retained at its exact priority-queue head.
|
||||
`LandblockPresentationPipeline` meters render, physics, static, building, and
|
||||
|
|
@ -767,9 +779,14 @@ The Slice E connected closeout is recorded in
|
|||
`WorldRevealCoordinator` is the single App-layer owner of each login or portal
|
||||
reveal lifetime. It composes the canonical `WorldRevealReadinessBarrier` with
|
||||
generation-scoped lifecycle observation and the streaming destination
|
||||
reservation, so begin, preparation, readiness, materialization, world
|
||||
visibility, completion, cancellation, and reserved capacity cannot be wired
|
||||
independently. The barrier joins `StreamingController`/`GpuWorldState`
|
||||
reservation plus a generation-scoped render-resource profile, so begin,
|
||||
preparation, readiness, materialization, viewport release, protocol completion,
|
||||
cancellation, and reserved capacity cannot be wired independently. While the
|
||||
normal world viewport is withheld, mesh and composite upload owners may admit
|
||||
more small destination items per frame, but retain the ordinary 8 MiB byte,
|
||||
array, buffer, and mipmap ceilings. The exact profile ends at the retail
|
||||
portal-to-world viewport swap; it does not reduce the readiness radius or
|
||||
reveal incomplete content. 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. There is
|
||||
|
|
@ -822,6 +839,12 @@ and before retained UI. The shared dispatcher is reset to no world-cell clips
|
|||
and no world point lights for this pass. Chat, gameplay windows, toolbar,
|
||||
cursor, and input continue normally above it. The synthetic object never
|
||||
enters `LiveEntityRuntime`, collision, picking, radar, or server GUID state.
|
||||
Portal, paperdoll, and creature-appraisal viewports share
|
||||
`SyntheticEntityMeshReferenceOwner` but own independent leases. World
|
||||
landblock retirement therefore cannot evict a mesh still used by retained UI.
|
||||
The paperdoll keeps its last successful private object while the SmartBox
|
||||
player is temporarily unavailable and clears it only at the character-session
|
||||
boundary, matching `gmPaperDollUI::RedressCreature`.
|
||||
|
||||
`TeleportViewPlaneController` is the App-layer projection adapter for retail
|
||||
`SmartBox::SetOverrideFovDistance` / `Render::set_vdst`. It captures the active
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue