perf(scene): extend viewport scissor to hatch / image / wipeout passes (Phase 1.4)

Wire pass already uses `WireModel.vp_scissor` to clip viewport-projected
geometry to its paper-space viewport rect; hatch / image / wipeout
passes drew across the whole canvas. When a future paper-space path
projects fills/images into a viewport, they would bleed past the
viewport frame.

Add `vp_scissor: Option<[f32; 4]>` to HatchModel and ImageModel
(mirroring WireModel), forward it through HatchGpu / ImageGpu, and add
per-pass `compute_*_scissors` / `set_scissor_rect` machinery. Factored
the wire-side scissor-projection math into a shared `project_scissor`
helper. Field defaults to None at every constructor site — no producer
sets it yet, so this is plumbing for the paper-viewport fill projection
that Phase 1.4 unblocks without changing current visual output.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
This commit is contained in:
Hakan SevenandClaude Opus 4.7 committed 2026-05-15 23:13:16 +03:00
1 parent 9a4531bd8e
commit fbbac423d4
8 files changed
+145 -24

No files matched your search

+3
View File
@@ -119,6 +119,7 @@ impl HatchCommand {
color: [0.75, 0.75, 0.75, 0.85],
angle_offset: 0.0,
scale: 1.0,
vp_scissor: None,
}
}
}
@@ -254,6 +255,7 @@ impl GradientCommand {
color: [0.30, 0.60, 0.95, 0.80],
angle_offset: 0.0,
scale: 1.0,
vp_scissor: None,
}
}
}
@@ -402,6 +404,7 @@ impl CadCommand for BoundaryCommand {
color: [0.45, 0.45, 0.45, 0.60],
angle_offset: 0.0,
scale: 1.0,
vp_scissor: None,
};
return CmdResult::CommitHatch(model);
}