fix(streaming): retire stale portal-region entities
Port retail's 25-second leave-visibility lifetime over canonical live records, retaining spatially resident and owned entities while using the conservative ACE visibility envelope for nonresident records. Route expiry through the normal generation-safe F747 teardown so animations, effects, physics, and render owners unwind symmetrically. Replace the append-only modern mesh buffer with coalescing vertex/index ranges and upload each mesh's vertices once instead of once per material. Released zero-reference meshes can now reuse GPU ranges after portal and cache churn. A connected five-region round trip returned animation ownership to baseline, recreated the starting region on revisit, and held normal FPS. Release build succeeds and all 5,927 tests pass with five intentional skips. Co-authored-by: OpenAI Codex <codex@openai.com>
This commit is contained in:
parent
2cbf34a668
commit
3971997689
13 changed files with 918 additions and 117 deletions
|
|
@ -79,20 +79,39 @@ order inside one instanced draw, with only DAT blend-mode changes splitting a
|
|||
run. The identical location recovered to about 153 FPS / 6.6 ms in the
|
||||
connected Release client.
|
||||
|
||||
A second, genuinely cumulative portal regression remained: ACE retains
|
||||
`KnownObjects` across normal teleports, while acdream retained every old
|
||||
`LiveEntityRecord` indefinitely. Each destination therefore left animation,
|
||||
effect, and render owners active; after enough trips the render thread blocked
|
||||
inside the GL driver and C95B fell persistently to 3–12 FPS. The client now
|
||||
ports retail's 25-second leave-visibility destruction queue, using current
|
||||
spatial residency plus holtburger's conservative 384-unit ACE envelope until
|
||||
exact ObjCell PVS is available. Expiry uses the normal generation-safe F747
|
||||
teardown. The modern `GlobalMeshBuffer` also allocates one vertex range per
|
||||
mesh, coalesces released ranges, and reuses them on cache eviction instead of
|
||||
duplicating vertices per material and growing forever. A connected five-region
|
||||
round trip returned live/animation ownership to baseline, recreated C95B on
|
||||
revisit, and held its normal 60–80 FPS.
|
||||
|
||||
**Files:** `src/AcDream.App/Rendering/RetailAlphaQueue.cs`;
|
||||
`src/AcDream.App/Rendering/Wb/WbDrawDispatcher.cs`;
|
||||
`src/AcDream.App/Rendering/ParticleRenderer.cs`;
|
||||
`src/AcDream.App/Rendering/Shaders/particle.vert`;
|
||||
`src/AcDream.App/Rendering/Shaders/particle.frag`;
|
||||
`src/AcDream.App/Rendering/RetailPViewRenderer.cs`.
|
||||
`src/AcDream.App/Rendering/RetailPViewRenderer.cs`;
|
||||
`src/AcDream.App/World/LiveEntityLivenessController.cs`;
|
||||
`src/AcDream.App/Rendering/Wb/GlobalMeshBuffer.cs`.
|
||||
|
||||
**Research:**
|
||||
`docs/research/2026-07-18-retail-shared-alpha-list-pseudocode.md`.
|
||||
`docs/research/2026-07-18-retail-shared-alpha-list-pseudocode.md`;
|
||||
`docs/research/2026-07-18-retail-object-liveness-and-mesh-reclamation-pseudocode.md`.
|
||||
|
||||
**Acceptance:** At a translucent lifestone, smoke or flame behind the crystal
|
||||
is attenuated by it while an effect in front remains bright. The lifestone's
|
||||
own transparency, nearby candle/portal particles, indoor/outdoor PView
|
||||
transitions, paperdoll rendering, and portal-space rendering do not regress.
|
||||
Repeated distant portal trips do not accumulate live/animation owners or
|
||||
degrade FPS, and revisiting an expired region restores its objects.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue