feat(render): draw 3D mesh outline edges black in filled modes
Extends the solid feature-edge behaviour to mesh entities (PolyfaceMesh / PolygonMesh): their triangulation outline edges now render black when a filled-with-edges mode is active, and keep the entity colour in the lines-only modes (wireframe / hidden-line). A mesh entity emits its face fill and its outline edges as separate WireModels sharing the entity handle: the fill carries fill_tris plus a non-empty fill_tris_low (real 3D depth), the edge carries points. The old is_3d_mesh_edge flag keyed on `!fill_tris.is_empty()`, which tagged the points-less fill wire rather than the edge wire, so the edges were never recognised. upload_wires now collects the handles of real 3D fill wires and flags any points-wire sharing one as the mesh edge (text greek, whose fill has an empty fill_tris_low, is excluded — matching the face3d test). The wire draw loop then routes flagged edges through a new black wire pipeline (fs_black) in filled-with-edges modes. fs_black lives in wire_indexed.wgsl (the native shader) and wire.wgsl (the wasm shader). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
1065bc12b2
commit
e6a961be6c
3 changed files with 106 additions and 2 deletions
|
|
@ -206,3 +206,18 @@ fn in_dash(dist: f32, pat_len: f32, p0: vec4<f32>, p1: vec4<f32>) -> bool {
|
|||
let alpha = select(1.0, in.color.a, u.transparency_enable > 0.5);
|
||||
return vec4<f32>(in.color.rgb, alpha);
|
||||
}
|
||||
|
||||
// Black variant: used for 3D mesh outline edges in filled render modes so the
|
||||
// mesh reads as a shaded surface framed by black edges. Keeps the dash/LOD
|
||||
// logic identical to `fs_main`; only the RGB is forced to black.
|
||||
@fragment fn fs_black(in: VertexOut) -> @location(0) vec4<f32> {
|
||||
if in.pattern_length > 0.0 {
|
||||
if in.min_elem >= u.world_per_pixel {
|
||||
if !in_dash(in.distance, in.pattern_length, in.pat0, in.pat1) {
|
||||
discard;
|
||||
}
|
||||
}
|
||||
}
|
||||
let alpha = select(1.0, in.color.a, u.transparency_enable > 0.5);
|
||||
return vec4<f32>(0.0, 0.0, 0.0, alpha);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue