Display-space positions (vertexCount * 3), rewritten per displayDims epoch
displayDims.join() of what position holds; null before the first extract
Per-vertex slab-membership mask (vertexCount), rewritten every cull.
Unlike position this genuinely changes on every slice move, so there is nothing to
skip — but there is also no reason to reallocate it each time. One byte per vertex is
small per epoch and pure garbage at scrub rates.
Worst-case face-compaction scratch (faceCount * 3), rewritten every cull.
The largest per-epoch allocation the cull had: 12 bytes per face, so ~12 MB for a 1M-face mesh, discarded and reallocated on every slice move. Sized for the worst case because every face may survive; the kernel reports how many actually did.
OptionalfastFast-path bounds cache, and the displayDims epoch they were measured in.
ONLY the no-hidden-dims fast path may use this, and the distinction is the whole
reason it is a cache rather than a plain field. On that path nothing is culled, so
the emitted index is the authored faces verbatim and the box depends solely on
position — which changes only when displayDims does. On the CULL path the
visible set changes with every slice move, so its box must be recomputed every
epoch and this cache is never consulted.
Worth having because the recompute is O(faces), not O(1): measured 5.3 ms at 1M faces and 26 ms at 5M, per sweep. A 3D mesh sitting in a scene that has navigable dimensions elsewhere gets swept on every scrub frame, so at 5M faces that alone overruns a 60 Hz frame budget while computing a box that cannot have changed.
OptionalfastdisplayDims.join() that fastPathBounds was measured in; unset before the first
Reusable projection output buffer plus the epoch it currently holds.
Named after Points'
ProjectionTargetBuffers(data/points/projection.ts), which is the same idea: the loader owns the output memory and the projection writes through it instead of allocating. Mesh carries one extra field its sibling does not need —displayDimsKey— because reuse makes buffer identity useless as a "did the displayed axes change" signal, and mesh must answer that to know whether to re-extract at all.