Build a sink that stores recorded primitives in arrays keyed by feature.
Each recordX method checks the matching flag in config first — when
the feature is off, the call no-ops, so callers can record unconditionally
without an extra check.
beginFrame() clears every non-snap array. clearSnap() clears the snap
array. Snap survives across frames within a gesture (cleared on
gesture-end by the Canvas).
snapshot() returns live references — no copy. The overlay layer reads
these in the same render frame.
Build a sink that stores recorded primitives in arrays keyed by feature. Each
recordXmethod checks the matching flag inconfigfirst — when the feature is off, the call no-ops, so callers can record unconditionally without an extra check.beginFrame()clears every non-snap array.clearSnap()clears the snap array. Snap survives across frames within a gesture (cleared on gesture-end by the Canvas).snapshot()returns live references — no copy. The overlay layer reads these in the same render frame.