aboutsummaryrefslogtreecommitdiff
path: root/crates/fparkan-render/src
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-06-22 15:41:21 +0300
committerValentin Popov <valentin@popov.link>2026-06-22 15:41:21 +0300
commit8b91a0bfbf0097d145359c8508a61696ade812d1 (patch)
tree3e0f3c1c72034b13b73260fca204c101fc7aa379 /crates/fparkan-render/src
parentfb97405e0c47dadf656e5c92c76ddaff95d78222 (diff)
downloadfparkan-8b91a0bfbf0097d145359c8508a61696ade812d1.tar.xz
fparkan-8b91a0bfbf0097d145359c8508a61696ade812d1.zip
fix: make core error displays actionable
Diffstat (limited to 'crates/fparkan-render/src')
-rw-r--r--crates/fparkan-render/src/lib.rs46
1 files changed, 45 insertions, 1 deletions
diff --git a/crates/fparkan-render/src/lib.rs b/crates/fparkan-render/src/lib.rs
index a2f18d6..5f6d1da 100644
--- a/crates/fparkan-render/src/lib.rs
+++ b/crates/fparkan-render/src/lib.rs
@@ -172,7 +172,28 @@ pub enum RenderError {
impl std::fmt::Display for RenderError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- write!(f, "{self:?}")
+ match self {
+ Self::InvalidRange => write!(f, "render command contains an empty index range"),
+ Self::InvalidDrawRange {
+ draw_id,
+ stable_order,
+ start,
+ count,
+ } => write!(
+ f,
+ "draw {} has invalid index range start={} count={} at stable order {}",
+ draw_id.0, start, count, stable_order
+ ),
+ Self::MaterialIndexOutOfBounds {
+ draw_id,
+ material_index,
+ material_count,
+ } => write!(
+ f,
+ "draw {} references material index {} but only {} material slots are available",
+ draw_id.0, material_index, material_count
+ ),
+ }
}
}
@@ -535,6 +556,29 @@ mod tests {
}
#[test]
+ fn render_error_display_is_actionable() {
+ assert_eq!(
+ RenderError::InvalidDrawRange {
+ draw_id: DrawId(9),
+ stable_order: 10,
+ start: 4,
+ count: 0
+ }
+ .to_string(),
+ "draw 9 has invalid index range start=4 count=0 at stable order 10"
+ );
+ assert_eq!(
+ RenderError::MaterialIndexOutOfBounds {
+ draw_id: DrawId(7),
+ material_index: 3,
+ material_count: 2
+ }
+ .to_string(),
+ "draw 7 references material index 3 but only 2 material slots are available"
+ );
+ }
+
+ #[test]
fn ui_phase_is_excluded_until_requested() -> Result<(), RenderError> {
let snapshot = RenderSnapshot {
camera: CameraSnapshot::default(),