Extract CSG engine + device hotplug; resolve blend-formula question
- New Csg utility (pure polygon-list functions: union/subtract/intersect
over BSP clip/invert sequences). AbstractCompositeShape's three CSG
methods are now one-line delegates; clonePolygons moved into Csg.
Composite drops 95 lines and its dependency on BspTree.
- New gui/DeviceHotplug: head-tracker + SpaceMouse hot-plug managers,
extracted from ViewPanel (which now holds a single field and two
delegating getters). ViewPanel loses its HeadTrackingManager/
SpaceMouseManager lifecycle code.
- Blend formulas: PROVEN bit-identical. SolidPolygon's
((255-a)*dest + a*src)>>8 and TexturedTriangle's lerp form
dest + ((a*(src-dest) - dest)>>8) agree for all 16.6M (a,src,dest)
inputs (exhaustive check). Documented at both span writers; no change.
- transformChildrenParallel's aggregator param: NOT dead as the review
claimed — it feeds the serial-fallback paths. Restored with accurate
javadoc (was nearly deleted on the review's say-so; the build caught
it before commit).
Deliberately NOT split: ViewPanel's render-loop core (mailbox, present
gates, pending paints) and AbstractCompositeShape's parallel-transform
planner — both are concurrency-critical and deliberate; extraction
trades cohesion for race-condition risk with zero functional gain.