0e3e2abdb6
primeSceneForLoader() compiled scene materials and rendered the shadow/reflection passes once, but never ran the full composer pipeline — so the SSAO and output passes compiled their programs and allocated their render targets on the first live frame after the loader faded, tanking FPS for ~1-2s before it climbed to full. Now the loader runs composer.render() twice during prime, and precompiles the flip page materials (created lazily on first flip, so previously missed by renderer.compile) via a throwaway probe mesh. The heavy first-frame work is paid behind the loader overlay instead. Verified live: loader timings show composerWarmup taking ~1499ms during load (exactly the cost that used to hit the first frame); after fade-out there are no over-budget tank frames in the slow-frame log and idle settles at ~72fps. Static suite passes (165). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>