forked from 1b-agent/opencadstudio-upstream
perf(scene): memoize Face3D wire split across frames
build_primitive ran split_face3d_wires every frame — for each wire a string-parse + document handle lookup + clone, to separate Face3D wires from the rest — even when a pan had just reused the tessellation. The split is content-only, so memoize it by the Model-tile wire content id: a pan-reuse (same id) reuses the split, and the common no-overlay frame returns the cached `other` Arc with zero clone. Preview/interim frames clone once to append. Non-tile paths split inline as before. Completes the cheap-pan path: a pure pan now reuses the CPU tessellation, the Face3D split, and the GPU wire upload — only the view_proj uniform and per-frame scissors recompute. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
0f40cfa054
commit
65eba3887a
3 files changed
+43
-5
No files matched your search
@@ -176,6 +176,13 @@ outright — no re-tessellation, `tess ms` drops to ~0 on the PERF HUD. Zoom
|
||||
exactly as before; the cull margin is unchanged, so miss cost is identical
|
||||
(no zoom regression).
|
||||
|
||||
**Partial (landed): per-frame split.** `build_primitive` ran
|
||||
`split_face3d_wires` every frame — an O(N) per-wire handle lookup + clone to
|
||||
separate Face3D wires — even on a pan that reused the tessellation. It's now
|
||||
memoized by the tile's wire content id, and the non-overlay frame reuses the
|
||||
`other` Arc with no clone at all. So a pan reuses tessellation, the split, and
|
||||
the GPU upload; only the uniform + scissors update per frame.
|
||||
|
||||
**Partial (landed): hover.** `set_hover_highlight` no longer bumps the geometry
|
||||
epoch (a full re-tessellation) when the hovered entity is already selected —
|
||||
the effective highlight set `selected ∪ {hover}` is then unchanged, so the
|
||||
|
||||
Reference in new issue
Block a user