Release any open file handles or internal decode state. Idempotent; safe to call multiple times.
Fill the caller's destination buffers from the source, selecting rows
either by chunk index or by an explicit index list (see
ReadRequest). Layers present in the request are filled; absent
layers are skipped. All passed buffers must share the same count —
the chunk size for a chunk request, or count for a gather.
Every source supports both selections: a chunk is a contiguous range and a gather is an arbitrary one, but the per-row decode is the same.
Lazy, chunked, layered view onto gaussian splat data.
Sources are opened over a file (or derived from another source via a combinator) and expose only metadata up front — no gaussian data is loaded at open time except for formats whose decode is fundamentally whole-blob (SPZ, MJS). Data is materialized into caller-allocated
ChunkDatabuffers on demand via ChunkSource.read.Memory ownership is on the caller: buffers are acquired from a
ChunkDataPool, filled byread, used, and released back to the pool. The source itself never holds long-lived buffer memory on the caller's behalf.