mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-24 09:46:59 -06:00
The renderer kept brush art per node id and stroke. The copies drawn for symbol instances, inline graphics and repeat copies share their art's ids, so they replaced each other's brush art and it was made again in every frame. The pieces were drawn as plain nodes, so brush art that is a live object, such as an envelope that a scatter brush places, was evaluated again in every frame, for a path on the page too. The brush cache now also keys brush art by the stroked path, so each copy keeps its own. Kept pieces are drawn through the renderer's caches: their stroke outlines, live-effect geometry and live object evaluations are kept between frames. Each frame draws what a new renderer draws. On one thread at 1000 x 1000 pixels, 2,000 paths on the page whose scatter brush art is an envelope took 400 ms a frame on main and take 94 ms, and the fastest frames of 2,000 instances of a symbol whose art is a brushed path went from 16 ms to 12 ms, with the same pixels. Docs: docs/target-app-parity.md