mirror of
https://github.com/storytold/figcraft.git
synced 2026-11-03 00:39:44 -06:00
Merge #312: perf(canvas): refresh full-viewport previews during zoom (M8) (@tylerjenningsw)
This commit is contained in:
@@ -95,7 +95,12 @@ ellipse, its arc handles `arcHandles`, for a selected rectangle, frame, polygon
|
||||
an idle window draws none) with the most frequent repaint requests behind them (`repaintCauses`:
|
||||
`[{at: "file:line", count}]`, every request made in the frame before each one, delayed ones such as
|
||||
the autosave deadline included; egui's `context.rs` begin-pass line means input events) and what the last canvas render had to do (`canvas.renderWork`: `full`, `partial` with
|
||||
the `pixels` re-rendered after a pan or an edit, or `reused`). While a prototype plays, `presenter`
|
||||
the `pixels` re-rendered after a pan or an edit, or `reused`), whether the canvas shows a coarse
|
||||
zoom preview or the refined image (`canvas.quality`: `preview` or `refined`) and the time from
|
||||
asking for a render to its preview and its refined image being handed to egui as the canvas
|
||||
texture (`canvas.previewLatencyMs`, `canvas.refineLatencyMs`, on a monotonic clock, rendering
|
||||
included in the browser too; the GPU upload and presenting the frame come after; `null` until
|
||||
there was one). While a prototype plays, `presenter`
|
||||
(full window) and `preview` (the preview pane) hold the player's state: the `current` frame and its
|
||||
`name`, `start`, `history`, open `overlays`, how many delayed mouse triggers are `waiting`, the screen's `scroll` offset and `scrollRange`, the
|
||||
`device` (and whether it is turned to `landscape`, its `deviceColor`) and the `viewport` of the frame
|
||||
|
||||
+3
-1
@@ -194,7 +194,9 @@ No alpha blockers: the alpha gate in [`roadmap.md`](roadmap.md#alpha-gate) passe
|
||||
|
||||
### 7. CPU canvas where Figma uses the GPU
|
||||
- **Missing:** GPU rendering of the canvas. FigCraft renders with tiny-skia on the CPU (banded,
|
||||
parallel, retained) and shows the image through wgpu.
|
||||
parallel, retained) and shows the image through wgpu. A new zoom can't reuse the retained
|
||||
image; when renders from scratch take a frame or more, the whole view is previewed with a
|
||||
sixteenth of the pixels first, then refined.
|
||||
- **Evidence (measured, `cargo xtask bench`):** a 50k-layer page ~8 ms zoomed out with levels of
|
||||
detail, single-layer edits at 10k layers ~0.2 ms; full 1440×900 renders 7–15 ms at 10k layers.
|
||||
Heavy effects (glass, background blur, noise) and 4K/5K canvases at 2x are where CPU time grows.
|
||||
|
||||
Reference in New Issue
Block a user