forked from 1b-agent/opencadstudio-upstream
fix(text): grip-drag no longer hides text (#316)
Dragging text by a grip hid it until release. The dragged entity is hidden from the base wire set and shown as a preview overlay, but its SDF glyph quads (text_verts) were never uploaded for the preview, so the text vanished mid-drag. Add a per-frame preview_text GPU buffer (sibling to preview_wires). A rigid whole-entity move of pure text (TEXT/MTEXT, Square insertion grip) slides the drag-start glyphs by the drag delta instead of re-shaping the run every move; reshape grips (MTEXT width), dimensions and wire entities re-tessellate and feed the same buffer. Also fold preview_text into render_signature: a pure-text slide leaves preview_wires empty, so without it the scene-render cache froze the dragged text at its first frame (grip moved but text stayed, then jumped to place on release). Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
1 parent
88450f0cd1
commit
67fe363775
9 files changed
+176
-5
No files matched your search
@@ -14,11 +14,18 @@ impl Scene {
|
||||
self.preview_wires = wires;
|
||||
}
|
||||
|
||||
pub fn set_preview_text(&mut self, verts: Vec<crate::scene::pipeline::text_gpu::TextVertex>) {
|
||||
// Overlay glyphs — same reasoning as `set_preview_wires`: no geometry
|
||||
// bump. Uploaded to a dedicated per-frame text buffer in `prepare`.
|
||||
self.preview_text = verts;
|
||||
}
|
||||
|
||||
pub fn clear_preview_wire(&mut self) {
|
||||
// No geometry bump — see `set_preview_wires`. Dropping the overlay
|
||||
// flips the wire content id back to the base tessellation id, which
|
||||
// re-uploads the base wires (without the preview) on the next frame.
|
||||
self.preview_wires = vec![];
|
||||
self.preview_text = vec![];
|
||||
self.interim_wire = None;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user