forked from 1b-agent/opencadstudio-upstream
feat(render): phase 0 — render-mode pick_list + 3-flag pipeline plumbing
Replaces the binary Wireframe/Solid toggle with a 7-mode dropdown that maps onto acadrust's `ViewportRenderMode` enum: Wireframe 2D / Wireframe 3D / Hidden Line / Flat Shaded / Gouraud Shaded / Flat Shaded + Edges / Gouraud Shaded + Edges. Per-tab state lives on `DocumentTab::render_mode`; the old `SetWireframe` message forwards to `SetRenderMode` so the ribbon + WIREFRAME / SOLID command line keep working. `scene::render::render_mode_flags()` translates the mode into three pipeline-facing booleans (`face3d_fill`, `mesh_fill`, `show_3d_edges`); `mesh_fill` / `show_3d_edges` are stubs that the upcoming phases will consume. `Primitive` carries the derived `view_wireframe` plus the two new fields through to `prepare()`. `Pipeline::upload_face3d` takes a `wireframe_only` flag that drops 3DFACE quad fills (built from `key_vertices`) while keeping the `all_wires.fill_tris` channel — that channel carries text-LOD greek rectangles and PolyfaceMesh face triangles which must stay visible in wireframe mode. 3DFACE edges stay on regardless of mode. Solid3D mesh wireframe rendering, Hidden Line z-prepass, and Flat / Gouraud shader uniforms come in phases 1–4. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
1 parent
5ea996d5fe
commit
2145ab8a66
8 files changed
+273
-90
No files matched your search
+37
-12
@@ -20,14 +20,20 @@ pub struct ViewportPane<'a> {
|
||||
pub scene: &'a Scene,
|
||||
pub mode: ViewportPaneMode,
|
||||
pub show_viewcube: bool,
|
||||
pub render_mode: acadrust::entities::ViewportRenderMode,
|
||||
}
|
||||
|
||||
impl<'a> ViewportPane<'a> {
|
||||
pub fn model(scene: &'a Scene, show_viewcube: bool) -> Self {
|
||||
pub fn model(
|
||||
scene: &'a Scene,
|
||||
show_viewcube: bool,
|
||||
render_mode: acadrust::entities::ViewportRenderMode,
|
||||
) -> Self {
|
||||
Self {
|
||||
scene,
|
||||
mode: ViewportPaneMode::Model,
|
||||
show_viewcube,
|
||||
render_mode,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,6 +45,7 @@ impl<'a> ViewportPane<'a> {
|
||||
scene,
|
||||
mode: ViewportPaneMode::Paper { handle },
|
||||
show_viewcube: false,
|
||||
render_mode: acadrust::entities::ViewportRenderMode::Wireframe2D,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -52,11 +59,20 @@ impl<'a> ViewportPane<'a> {
|
||||
pub struct PaperViewportPane<'a> {
|
||||
pub scene: &'a Scene,
|
||||
pub handle: Handle,
|
||||
pub render_mode: acadrust::entities::ViewportRenderMode,
|
||||
}
|
||||
|
||||
impl<'a> PaperViewportPane<'a> {
|
||||
pub fn new(scene: &'a Scene, handle: Handle) -> Self {
|
||||
Self { scene, handle }
|
||||
pub fn new(
|
||||
scene: &'a Scene,
|
||||
handle: Handle,
|
||||
render_mode: acadrust::entities::ViewportRenderMode,
|
||||
) -> Self {
|
||||
Self {
|
||||
scene,
|
||||
handle,
|
||||
render_mode,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,7 +87,12 @@ impl<'a, Msg: std::fmt::Debug + Clone> shader::Program<Msg> for PaperViewportPan
|
||||
bounds: Rectangle,
|
||||
) -> Self::Primitive {
|
||||
self.scene
|
||||
.build_active_viewport_primitive(self.handle, state.hover_region, bounds)
|
||||
.build_active_viewport_primitive(
|
||||
self.handle,
|
||||
state.hover_region,
|
||||
bounds,
|
||||
self.render_mode,
|
||||
)
|
||||
}
|
||||
|
||||
fn update(
|
||||
@@ -109,14 +130,18 @@ impl<'a, Msg: std::fmt::Debug + Clone> shader::Program<Msg> for ViewportPane<'a>
|
||||
bounds: Rectangle,
|
||||
) -> Self::Primitive {
|
||||
match &self.mode {
|
||||
ViewportPaneMode::Model => {
|
||||
self.scene
|
||||
.build_primitive(state.hover_region, bounds, self.show_viewcube)
|
||||
}
|
||||
ViewportPaneMode::Paper { handle } => {
|
||||
self.scene
|
||||
.build_viewport_primitive(*handle, state.hover_region, bounds)
|
||||
}
|
||||
ViewportPaneMode::Model => self.scene.build_primitive(
|
||||
state.hover_region,
|
||||
bounds,
|
||||
self.show_viewcube,
|
||||
self.render_mode,
|
||||
),
|
||||
ViewportPaneMode::Paper { handle } => self.scene.build_viewport_primitive(
|
||||
*handle,
|
||||
state.hover_region,
|
||||
bounds,
|
||||
self.render_mode,
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user