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
|
|
@ -55,6 +55,15 @@ The portal viewport is a replacement for the world viewport. It is not a
|
|||
full-screen UI overlay: normal retained UI continues to update and draw above
|
||||
it.
|
||||
|
||||
Private retained-UI viewports also keep their own objects. In particular,
|
||||
`gmPaperDollUI::RedressCreature @ 0x004A3BC0` creates
|
||||
`m_pInventoryObject` only when it is absent and the SmartBox player is
|
||||
available; a temporarily unavailable world player does not clear an already
|
||||
constructed inventory object. `gmPaperDollUI::~gmPaperDollUI @ 0x004A3590`
|
||||
removes that private object at the UI/session lifetime boundary. Therefore a
|
||||
portal-space world quiescence may defer a paperdoll redress, but it must not
|
||||
empty and later reconstruct the visible private paperdoll.
|
||||
|
||||
## Begin/end and scene visibility
|
||||
|
||||
```text
|
||||
|
|
@ -96,6 +105,36 @@ distance, hides the portal viewport, shows the world viewport, clears the
|
|||
teleport object's sequence animations, plays `Sound_UI_ExitPortal`, and enters
|
||||
`WorldFadeIn`. That following state restores the ordinary game view distance.
|
||||
|
||||
The viewport swap is also the end of the destination-cell blocking edge, not
|
||||
the end of the complete teleport protocol:
|
||||
|
||||
```text
|
||||
TunnelFadeOut completes:
|
||||
destination cells are already available
|
||||
release SmartBox world blocking
|
||||
hide portal viewport
|
||||
show world viewport
|
||||
enter WorldFadeIn
|
||||
|
||||
WorldFadeIn completes one second later:
|
||||
send LoginComplete
|
||||
clear teleport-in-progress
|
||||
enter Off
|
||||
```
|
||||
|
||||
The two edges must remain distinct in an asynchronous client. Holding world
|
||||
blocking until `LoginComplete` creates a one-second clear-color/void interval
|
||||
after the tunnel viewport has already been hidden. Conversely, marking the
|
||||
whole teleport complete at the viewport swap loses retail's final
|
||||
`WorldFadeIn` protocol state.
|
||||
|
||||
The asynchronous renderer may temporarily spend otherwise-idle resource
|
||||
capacity on the withheld destination, but that policy belongs to the exact
|
||||
reveal generation. Acdream raises only the count of small mesh/composite
|
||||
uploads while keeping the ordinary byte, array, buffer, and mipmap ceilings.
|
||||
The profile ends at the viewport swap above. It never changes the required
|
||||
destination radius, the readiness predicate, or the resulting pixels.
|
||||
|
||||
## Camera motion
|
||||
|
||||
The camera rolls around its own AC `+Y` forward axis. It does not yaw around
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue