The RUNTIME uniforms a visual material's clone() must carry over: the
values written after construction (camera broadcast, depth-sort
coordinator, density guard, gamma/texture updates) that a fresh material
built from the source's config would otherwise reset to the constructor
defaults. Config-derived state (opacity, gain, blending, colormap, …) is
re-derived by the constructor from the config each clone passes, and
texture rebinds go through each wrapper's own rebind chokepoint (which
re-stamps the baked texture width), so neither is listed here.
ONE list per geometry type, shared by the GLSL and TSL twins so the two
clones cannot drift; a name a twin does not declare (e.g. uLineJoin, a
runtime uniform only in GLSL) is skipped for it. Why each rides along:
uResolution, uPixelRatio, uNearCull, maxPointSize,
uMaxLinePixelWidth: the camera broadcast — a clone
otherwise renders with stale camera state until the next broadcast.
uSortedIndexSlot: the active ordering buffer — a clone taken while
the geometry draws from slot 1 would read the stale buffer until the
coordinator's next per-frame re-assert.
uDensityDrop, uDensityAlphaExp: the density guard's thinning — it
is re-asserted only on the guard's next visit, which an off-screen
node never gets.
uInvGamma, uProjectionMode, radiusScale, uLineJoin: derived
state a later update set (gamma, blending's projection, the commit's
dtype scaling, the join override).
The RUNTIME uniforms a visual material's
clone()must carry over: the values written after construction (camera broadcast, depth-sort coordinator, density guard, gamma/texture updates) that a fresh material built from the source's config would otherwise reset to the constructor defaults. Config-derived state (opacity, gain, blending, colormap, …) is re-derived by the constructor from the config each clone passes, and texture rebinds go through each wrapper's own rebind chokepoint (which re-stamps the baked texture width), so neither is listed here.ONE list per geometry type, shared by the GLSL and TSL twins so the two clones cannot drift; a name a twin does not declare (e.g.
uLineJoin, a runtime uniform only in GLSL) is skipped for it. Why each rides along:uResolution,uPixelRatio,uNearCull,maxPointSize,uMaxLinePixelWidth: the camera broadcast — a clone otherwise renders with stale camera state until the next broadcast.uSortedIndexSlot: the active ordering buffer — a clone taken while the geometry draws from slot 1 would read the stale buffer until the coordinator's next per-frame re-assert.uDensityDrop,uDensityAlphaExp: the density guard's thinning — it is re-asserted only on the guard's next visit, which an off-screen node never gets.uInvGamma,uProjectionMode,radiusScale,uLineJoin: derived state a later update set (gamma, blending's projection, the commit's dtype scaling, the join override).