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
|
|
@ -172,8 +172,11 @@ begin destination generation:
|
|||
silence old-generation audio
|
||||
reject old generation from collision, picking, radar, and targeting
|
||||
|
||||
at the shared-origin transaction boundary:
|
||||
atomically swap the complete old spatial generation out of reach
|
||||
retain one exact teardown receipt per old landblock
|
||||
|
||||
over later update/resource-maintenance frames:
|
||||
detach old landblocks through exact retry receipts
|
||||
release scripts/effects/lights/plugin projections
|
||||
release CPU owners
|
||||
admit renderer retirement; physical GL release remains fence delayed
|
||||
|
|
@ -200,6 +203,48 @@ Release-later never means run-later: an old owner may retain memory until its
|
|||
cursor runs, but it cannot keep simulating, colliding, rendering, targeting, or
|
||||
emitting audible work after the generation-quiesce edge.
|
||||
|
||||
The shared-origin commit barrier is the completion of **spatial detachment**,
|
||||
not completion of every deferred resource release:
|
||||
|
||||
```text
|
||||
capture exact old landblock/entity teardown receipts
|
||||
clear the old loaded/pending/traversal/collision-visible spatial indexes
|
||||
repark nonpersistent live projections by their canonical landblock
|
||||
rescue the persistent local-player projection
|
||||
publish the resulting live visibility edges once
|
||||
|
||||
once that single spatial-generation swap commits:
|
||||
recenter the shared coordinate origin
|
||||
configure and enqueue the destination window
|
||||
|
||||
on later frames:
|
||||
destination publication uses its reserved work lane
|
||||
old retirement receipts use remaining cleanup capacity
|
||||
a publication for landblock X waits only while X has an older receipt
|
||||
the exact receipt for destination X may advance ahead of unrelated FIFO
|
||||
ordinary publication continues when no destination result is available
|
||||
```
|
||||
|
||||
The per-landblock publication fence makes key-based terrain, physics,
|
||||
EnvCell, building, mesh-reference, and static-presentation cleanup safe: a
|
||||
late old receipt cannot remove a replacement owner with the same landblock
|
||||
key. Live objects are different. Their logical owner survives spatial
|
||||
withdrawal and may be reprojected immediately at the destination, so deferred
|
||||
landblock retirement must never clear a live object's lighting or
|
||||
translucency by reusable local ID. Live cell-scoped lighting is withdrawn by
|
||||
the incarnation-aware projection-visibility edge; logical translucency stays
|
||||
with the live record until its actual teardown. Landblock receipts clean only
|
||||
DAT-static entity presentation.
|
||||
|
||||
This swap is deliberately one **atomic oversized progress operation** in the
|
||||
modern frame meter. Splitting it into 625 budgeted landblock detach admissions
|
||||
created a five-second portal stall even though the old generation was already
|
||||
quiesced and no intermediate subset was observable. The atomic work scans the
|
||||
small live-projection index, clears the old spatial maps, and transfers their
|
||||
existing entity lists into receipts; it does not synchronously destroy every
|
||||
static resource. Expensive script, renderer, physics, light, plugin, and GL
|
||||
cleanup still advances through the ordinary retryable receipt cursors.
|
||||
|
||||
## Port constraints
|
||||
|
||||
1. Preserve existing exact retry receipts; successful stages never replay.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue