Luxar Viewer API Documentation - v2026.10.19
    Preparing search index...

    Module data/loaders/progressive/additive-ladder-core

    The shared engine of the additive-ladder progressive loaders.

    Points, Lines and GSplats each wrap N spatial-index loaders — one per additive_<i> subgroup, the rungs of one additive ladder — and stream them per view under the same lifecycle. That lifecycle used to be copy-maintained three times, and the richer behaviour the performance work added landed mostly in GSplats. It lives here once; a geometry supplies only what differs (LadderGeometry: how payloads concatenate, how elements are counted, the log vocabulary) and, for GSplats, a deeper lookahead planner.

    One updateView pass:

    1. Directives. Record the pass's playback budget and pinned ladder depth first — a pause re-trigger arrives with the SAME view and must still clear them.
    2. View change. Abort the old view's speculative reads (keeping a read-ahead of exactly the slice being entered, which the new pass joins), store the OUTGOING view's partial ladder under the outgoing key (departure store, so scrub-back stays warm), adopt an in-flight shadow (SlicePrefetcher) store of the incoming view, then restore a cached ladder or reset. A restored FULL ladder short-circuits the pass.
    3. Stream. Load rungs under the shared streaming policy (streaming-policy.ts): playback within its budget, prefetch toward the full ladder, refine until the first cold/slow rung, pinned exactly the pinned depth — whose rungs are all started up front under per-rung child signals so a brake cancels the remainder and releases what it decoded. While a rung loads, the next rung's spatial index is warmed at refinement priority (B6). A rung coming back empty never stops the loop (#1456): additive rungs are disjoint subsets, not coarse resamplings.
    4. Close. Log the summary at verbose, schedule the signal-linked speculative lookahead of the next rung and the B5 ±1-slice read-ahead of rung 0, then store the ladder (full ladders always; prefixes while a playback budget or pinned depth is active) unless the pass was torn down.

    The concatenated result is memoized on (reset generation, logical rung count): an unchanged view with no new rung returns the SAME reference, which the commit pipeline uses to skip no-op re-commits, and each fresh result is stamped with its prefix-lineage parent for the append fast path.

    AdditiveLadderCore
    LadderRung
    LadderGeometry
    LookaheadRequest
    LookaheadPlanner
    AdditiveLadderOptions
    PinnedRungLoad
    StreamPass
    reportSpeculativeFailure