Synchronize a Points material's geometry-derived state after a
geometry commit: the dtype-scale uniform AND the point-texture
binding.
The placeholder-first loading pattern creates a PointMaterial /
PointTSLMaterial from an empty geometry (radiusScale=1) before
real data arrives. When the first commit replaces the geometry with
real normalized Uint8 radii, the material uniforms must be updated
or the points render at [0,1] scale instead of [0,max_radius].
Point data lives in an RGBA32F texture that shares the geometry's
lifetime (point-geometry.ts::attachPointStorage). A pool acquire
may hand the node a DIFFERENT geometry+texture pair (growth,
best-fit reuse, first commit after the placeholder mesh), so the
commit rebinds uPointTex on the render material and — via
userData.pickNode — the pick material. Idempotent: both wrapper
classes no-op or cheaply re-write on an unchanged identity (the
common same-geometry commit), so this is safe to call on every
commit. Mirrors syncGSplatMaterialWithGeometry.
Synchronize a Points material's geometry-derived state after a geometry commit: the dtype-scale uniform AND the point-texture binding.
The placeholder-first loading pattern creates a
PointMaterial/PointTSLMaterialfrom an empty geometry (radiusScale=1) before real data arrives. When the first commit replaces the geometry with real normalized Uint8 radii, the material uniforms must be updated or the points render at[0,1]scale instead of[0,max_radius].Point data lives in an RGBA32F texture that shares the geometry's lifetime (
point-geometry.ts::attachPointStorage). A pool acquire may hand the node a DIFFERENT geometry+texture pair (growth, best-fit reuse, first commit after the placeholder mesh), so the commit rebindsuPointTexon the render material and — viauserData.pickNode— the pick material. Idempotent: both wrapper classes no-op or cheaply re-write on an unchanged identity (the common same-geometry commit), so this is safe to call on every commit. Mirrors syncGSplatMaterialWithGeometry.