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

    Interface PointsRefinementCtx

    interface PointsRefinementCtx {
        objects: ReadonlyMap<string, Object3D<Object3DEventMap> | undefined>;
        viewStateQueue: ViewStateQueue;
        loaders: Map<string, DataLoader>;
        deriveNodeViewState(
            path: string,
            attrs: PointsMetadata | undefined,
            opts: { applyPartialExtendTolerance: boolean },
        ): { skip: false; viewState: ViewState };
        updatePointsGeometry(
            path: string,
            data: LoadedPointsData,
            session?: UpdateSession,
        ): void;
        profiler?: UpdateProfiler | null;
        updateVisibleCountsInMonitor(): void;
        releaseLock(): void;
        retriggerUpdate(pendingState: Partial<ViewState>): void;
        isActive?(): boolean;
        signal?: AbortSignal;
        residencyBudget?: RefinementResidencyBudget;
    }
    Index
    objects: ReadonlyMap<string, Object3D<Object3DEventMap> | undefined>

    Scene objects already resolved by the phase eligibility sweep.

    viewStateQueue: ViewStateQueue
    loaders: Map<string, DataLoader>
    profiler?: UpdateProfiler | null

    Profiler for background-pass accounting. Each per-loader refinement step opens a 'LOD Refinement' pass root (its own persistent tree, separate from 'Total Update') with a per-node child session threaded through load → commit.

    signal?: AbortSignal

    Per-refinement-run abort signal. The orchestrator assigns the run's controller to the SceneLoader's _updateAbortController, so a superseding updateView (or dispose) aborts in-flight refinement chunk reads MID-PASS instead of waiting out the whole pass. An AbortError in the per-loader catch is cancellation, not failure.

    residencyBudget?: RefinementResidencyBudget

    Shared residency ceiling for sweep-registered progressive leaves. Absent = unbounded (today's behaviour).