Jun 9, 2026 ยท 23:26
Performance + portability pass merged to main. Lit/outline passes now draw from a shared VBO (pixel-identical to the old immediate path, VMK_IMMEDIATE=1 reverts); world->screen goes through one precomputed ScreenProjector per frame; normals refresh during modal drags is allocation-free over topology baked at cache rebuild (~17x at 1.5K faces); the wireframe layer only re-strokes when camera/geometry/style change. Undo picks position-only snapshots for pure-move modals automatically and holds a 64MB byte budget. The app builds and runs on Linux now (zenity dialogs + kiosk fallbacks) - first real step toward the Pi. New tests: scripts/run_tests.sh, a GUI ESC-cancel screenshot regression, and a normals A/B harness vs the old implementation. Two independent adversarial review agents vetted the diff; their critical find (ESC-cancel left the shaded mesh frozen at dragged positions) is fixed and regression-tested. Random startup palette confirmed as spec. CLAUDE.md reconciled with the docs-sync branch; plate docs entries 2/3/4/5/7/9/10 updated to match. Remaining Pi follow-ups tracked in PLAN.md (top item: ESSL 1.00 doesn't guarantee the toon shader's dynamic uniform indexing).
- claude