feat(render): double-single fills for the face3d pipeline
Table / PolyfaceMesh / greek-text / mleader-background fills go through the face3d pipeline; their vertices were single f32 and quantized at UTM scale. WireModel now carries a fill_tris_low residual (filled by the tessellate Lines path), Face3DVertex gains position_low (location 3), and face3d.wgsl reconstructs the eye-relative position from the pair. 3DFACE quads built from key_vertices use a zero residual (no low source). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
bd12cc2f5a
commit
c0f3d0de5e
41 changed files with 107 additions and 28 deletions
|
|
@ -1172,6 +1172,7 @@ fn tessellate_dimension_inner(
|
|||
plinegen: true,
|
||||
vp_scissor: None,
|
||||
fill_tris: vec![],
|
||||
fill_tris_low: Vec::new(),
|
||||
});
|
||||
}
|
||||
if !ext2.is_empty() {
|
||||
|
|
@ -1192,6 +1193,7 @@ fn tessellate_dimension_inner(
|
|||
plinegen: true,
|
||||
vp_scissor: None,
|
||||
fill_tris: vec![],
|
||||
fill_tris_low: Vec::new(),
|
||||
});
|
||||
}
|
||||
} else {
|
||||
|
|
@ -1212,6 +1214,7 @@ fn tessellate_dimension_inner(
|
|||
plinegen: true,
|
||||
vp_scissor: None,
|
||||
fill_tris: vec![],
|
||||
fill_tris_low: Vec::new(),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -1233,6 +1236,7 @@ fn tessellate_dimension_inner(
|
|||
plinegen: true,
|
||||
vp_scissor: None,
|
||||
fill_tris: geom.arrow_fill,
|
||||
fill_tris_low: Vec::new(),
|
||||
});
|
||||
|
||||
// DIMTFILL: 0=none, 1=drawing background (mask), 2=DIMTFILLCLR.
|
||||
|
|
@ -1265,6 +1269,7 @@ fn tessellate_dimension_inner(
|
|||
plinegen: true,
|
||||
vp_scissor: None,
|
||||
fill_tris: rect,
|
||||
fill_tris_low: Vec::new(),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -617,6 +617,7 @@ impl LeaderTess for Leader {
|
|||
plinegen: true,
|
||||
vp_scissor: None,
|
||||
fill_tris: vec![],
|
||||
fill_tris_low: Vec::new(),
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -716,6 +717,7 @@ impl LeaderTess for Leader {
|
|||
plinegen: true,
|
||||
vp_scissor: None,
|
||||
fill_tris,
|
||||
fill_tris_low: Vec::new(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1309,6 +1309,7 @@ impl MultiLeaderTess for MultiLeader {
|
|||
plinegen: true,
|
||||
vp_scissor: None,
|
||||
fill_tris: arrow_fill,
|
||||
fill_tris_low: Vec::new(),
|
||||
});
|
||||
|
||||
// ── Block content ───────────────────────────────────────────────────────
|
||||
|
|
@ -1556,6 +1557,7 @@ impl MultiLeaderTess for MultiLeader {
|
|||
plinegen: true,
|
||||
vp_scissor: None,
|
||||
fill_tris: vec![],
|
||||
fill_tris_low: Vec::new(),
|
||||
});
|
||||
}
|
||||
} else if lod_mode == 1 {
|
||||
|
|
@ -1597,6 +1599,7 @@ impl MultiLeaderTess for MultiLeader {
|
|||
plinegen: true,
|
||||
vp_scissor: None,
|
||||
fill_tris: greek_tris,
|
||||
fill_tris_low: Vec::new(),
|
||||
});
|
||||
}
|
||||
} else {
|
||||
|
|
@ -1636,6 +1639,7 @@ impl MultiLeaderTess for MultiLeader {
|
|||
plinegen: true,
|
||||
vp_scissor: None,
|
||||
fill_tris: vec![],
|
||||
fill_tris_low: Vec::new(),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -1694,6 +1698,7 @@ impl MultiLeaderTess for MultiLeader {
|
|||
plinegen: true,
|
||||
vp_scissor: None,
|
||||
fill_tris,
|
||||
fill_tris_low: Vec::new(),
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -1723,6 +1728,7 @@ impl MultiLeaderTess for MultiLeader {
|
|||
plinegen: true,
|
||||
vp_scissor: None,
|
||||
fill_tris: vec![],
|
||||
fill_tris_low: Vec::new(),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -716,6 +716,7 @@ pub fn tessellate_table(
|
|||
plinegen: true,
|
||||
vp_scissor: None,
|
||||
fill_tris,
|
||||
fill_tris_low: Vec::new(),
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue