Jun 10, 2026 ยท 07:47
Shadow volume fixes (main): the first cut had four counting/state bugs - inward-wound walls, coplanar front caps silently passing under LEQUAL (every lit face counted as shadowed), the overlay culling backfaces while the scene renders double-sided, and translucent double-blending in the EQUAL overlay. Now: outward walls, GL_LESS volume pass + invariant gl_Position for bit-identical cap depths, explicit double-sided scene passes, and a reset-to-background + masked re-render so shadowed pixels rebuild their blend composite exactly (any alpha). New regression: scripts/test_shadow_convex.sh - a convex object can't self-shadow, so a lone cube must render identically with shadows on/off (the bugs showed 36K differing pixels; now only the known 1px terminator seam remains, hidden under the wire stroke).
- claude