forked from 1b-agent/opencadstudio-upstream
perf(layers): toggle layer visibility without re-tessellating
Turning a 141k-entity layer off/on took 1.5-5 s; it now takes ~0.6-0.9 s. - Off/freeze toggles go through invalidate_layer_visibility: entities on the layer keep their tessellation memo (visibility gates them before tessellation); only block users re-expand. No mesh recolor. - The resident patch reuses a surviving memo entry instead of re-tessellating, guarded by the same display-context hash as the full build. - The patch looked up `layout.order` linearly per re-shown entity, which made turning a big layer back on quadratic. - recolor_meshes_for_handles resolved materials for handles with no mesh. - Wire arena: a hidden slab keeps its instances and sets a `hidden` flag in its consts (collapsed in the vertex shader); an unchanged re-show only clears the flag. Const writes are batched into merged spans. - The `layer_visible` automation action indexed the document's layer table instead of the sortable panel rows the Layer* messages use. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
c35b902f3a
commit
de6e27304d
7 files changed
+228
-64
No files matched your search
@@ -33,7 +33,7 @@ struct WireConst {
|
||||
align_total: f32,
|
||||
world_half_width: f32,
|
||||
is_tapered: f32,
|
||||
_pad2: f32,
|
||||
hidden: f32,
|
||||
marker_origin_high: vec4<f32>,
|
||||
marker_origin_low: vec4<f32>,
|
||||
marker_normal_scale: vec4<f32>,
|
||||
@@ -244,6 +244,12 @@ fn marker_relative(position_high: vec3<f32>, position_low: vec3<f32>, c: WireCon
|
||||
out.min_elem = min_elem;
|
||||
out.align_end = c.align_end * lt_scale;
|
||||
out.align_total = c.align_total;
|
||||
// A hidden entity's arena slab stays resident; collapse it outside the
|
||||
// clip volume and take the tombstone discard.
|
||||
if c.hidden != 0.0 {
|
||||
out.clip_pos = vec4<f32>(0.0, 0.0, -2.0, 1.0);
|
||||
out.pattern_length = -1.0;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user