feat: 4× MSAA anti-aliasing for main drawing pipelines
All main render pipelines (wire, hatch, image, mesh) now use 4× multisampling. Drawing passes render to a dedicated MSAA color buffer; a final empty resolve pass transfers the anti-aliased result to the iced surface target. The ViewCube renders post-resolve at 1× to avoid pipeline incompatibility. Depth buffer also upgraded to 4× MSAA. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
25b91bc09e
commit
c12b30ad3d
3 changed files with 87 additions and 15 deletions
|
|
@ -36,6 +36,8 @@ pub struct Primitive {
|
|||
/// Used by the ViewCube pipeline — no gimbal lock.
|
||||
pub(super) cam_rotation: Mat4,
|
||||
pub(super) hover_region: Option<usize>,
|
||||
/// Background color used to clear the MSAA buffer at the start of each frame.
|
||||
pub(super) bg_color: [f32; 4],
|
||||
}
|
||||
|
||||
// ── shader::Program impl ──────────────────────────────────────────────────
|
||||
|
|
@ -59,6 +61,12 @@ impl<Msg: std::fmt::Debug + Clone> shader::Program<Msg> for Scene {
|
|||
}
|
||||
all_wires.extend(self.preview_wires.iter().cloned());
|
||||
|
||||
let bg_color = if self.current_layout == "Model" {
|
||||
self.bg_color
|
||||
} else {
|
||||
self.paper_bg_color
|
||||
};
|
||||
|
||||
Primitive {
|
||||
wires: all_wires,
|
||||
hatches: self.synced_hatch_models(),
|
||||
|
|
@ -68,6 +76,7 @@ impl<Msg: std::fmt::Debug + Clone> shader::Program<Msg> for Scene {
|
|||
uniforms: Uniforms::new(&cam, bounds),
|
||||
cam_rotation: cam.view_rotation_mat(),
|
||||
hover_region: state.hover_region,
|
||||
bg_color,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -149,7 +158,7 @@ impl shader::Primitive for Primitive {
|
|||
target: &iced::wgpu::TextureView,
|
||||
clip: &Rectangle<u32>,
|
||||
) {
|
||||
pipeline.render(encoder, target, *clip);
|
||||
pipeline.render(encoder, target, *clip, self.bg_color);
|
||||
pipeline.viewcube.render(encoder, target, *clip);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue