You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(renderer): raise light caps 4+16 → 8+256 (the audit's top graphics blocker)
Every layer that mirrored the fixed arrays moves in lockstep:
LightingUniforms (Rust consts, now the single source), both legacy 3D
WGSL shaders, the material ABI's PerView block (ABI-VERSION 2 → 3 per
the documented protocol, EXPECTED_ABI_VERSION bumped), and the
material-system Rust mirror (population uses array::from_fn, so the
new capacity flows through without copy-length edits).
Deliberately a uniform buffer, not storage: 256×32B + 8×32B < 9KB fits
WebGL2's 16KB minimum UBO, so the cap raise lands on every backend with
zero shader permutations. Shaders loop only over the live count —
small scenes pay nothing. Froxel clustering (per-pixel cost for
genuinely large counts) is the follow-up optimization, now safe to
build against the golden harness.
New golden: 40 point lights in a hue ring over a floor — under the old
cap 60% of the ring goes dark, far past tolerance. Existing goldens
pass pixel-identical (capacity-only change).
0 commit comments