Mirrors the GLSL PointMaterial wrapper class one-for-one — same
constructor signature (PointMaterialConfig), same update methods
(updateOpacity, updateGamma, …), same applyBlendingMode +
clone semantics, same CameraAwareMaterial /
ColormapAwareMaterial interfaces. The host code in
MaterialManager.getPointMaterial picks one or the other based on
caps.apiSurface, so callers (NodeFactory, LayersPanel, etc.) never see
the divergence.
Uniform plumbing. This class owns one persistent UniformNode
per shader input via the tslNodes table. The public uniforms
record exposes each node as an IUniform-shaped getter/setter
proxy (see proxyIUniform in tsl-helpers.ts), so mutations to
material.uniforms.X.value land directly on node.value — no
per-render .onUpdate('render') callback bridge. Matches the
pattern already in use by LineTSLMaterial, GSplatTSLMaterial,
and PointPickingTSLMaterial.
defines carries the same USE_COLORMAP shader flag the GLSL
wrapper toggles. Flipping it on the TSL side requires a graph
rebuild (the colormap branch in the factory uses a JS-side if),
which is what updateColormapTexture triggers via rebuildGraph()
whenever the on/off state changes.
TSL / NodeMaterial counterpart to
PointMaterial.Mirrors the GLSL
PointMaterialwrapper class one-for-one — same constructor signature (PointMaterialConfig), same update methods (updateOpacity,updateGamma, …), sameapplyBlendingMode+clonesemantics, sameCameraAwareMaterial/ColormapAwareMaterialinterfaces. The host code inMaterialManager.getPointMaterialpicks one or the other based oncaps.apiSurface, so callers (NodeFactory, LayersPanel, etc.) never see the divergence.Uniform plumbing. This class owns one persistent
UniformNodeper shader input via thetslNodestable. The publicuniformsrecord exposes each node as anIUniform-shaped getter/setter proxy (seeproxyIUniformintsl-helpers.ts), so mutations tomaterial.uniforms.X.valueland directly onnode.value— no per-render.onUpdate('render')callback bridge. Matches the pattern already in use byLineTSLMaterial,GSplatTSLMaterial, andPointPickingTSLMaterial.definescarries the sameUSE_COLORMAPshader flag the GLSL wrapper toggles. Flipping it on the TSL side requires a graph rebuild (the colormap branch in the factory uses a JS-sideif), which is whatupdateColormapTexturetriggers viarebuildGraph()whenever the on/off state changes.