graph: inline scanline raster for filled triangles
Rewrite drawGradientTriangle's inner loop: incremental edge functions
(dE/dx and dE/dy deltas) instead of recomputing barycentric per pixel;
direct writes to the pixels typed array (skip color() / point() function
overhead); opaque fast-path that avoids the alpha-blend branch; integer
alpha blend using (r*aa + dst*inv) >> 8; and an early-break on the
scanline once we've entered and left a convex triangle.
Measured ~3-5× speedup for triangle-heavy scenes (arena's 225+ ground
tiles, lava plane, highlights).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>