Cones stop clipping to the floor every frame

On Windows, Flutter draws through Skia without a stencil buffer, so a
clip to any shape but a rectangle, a circle or a small convex polygon
is a mask drawn on the CPU for every draw under it. Every cone was
clipped to the map's whole painted floor (the replay once per frame
around all cones; the editor per cone), and editor cones also clipped
to their visibility shape. That was most of what cones cost.

- The revealed map is clipped to the floor once, in its own repaint
  boundary (RevealedFloor/ConeCoverageLayer take the floor), and the
  cone mask is composited over it in a clip layer that saves a layer.
  A colour filter would group them too, but the engine caches a
  filter's children as one image, redrawing the map with every mask.
- Cones joining a layer that clips the map skip their own floor clip;
  drag previews, screenshots and the replay's no-worker fallback still
  clip themselves.
- An editor cone without height floors draws its lit area (visibility
  within reach) as one path made once per painter, with no clip.

The only visible change: floor edges inside cones are now antialiased
(1 px lines, at most 17/255 on screenshots of a replay).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3204c8bb82Dara Adedeji committed on 10/14/2026, 11:53:24 PMparent13710f0

Checks

Some checks failed
6 files changedLine totals unavailable