From 2875d4ae61004cc6cee91556fb01dd1c78c09eaf Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Wed, 9 Sep 2026 12:56:53 +0100 Subject: [PATCH] fix(render): eliminate depth-write edge conflict at polyline arc joints --- src/scene/pipeline/circle_gpu.rs | 2 +- src/scene/pipeline/ellipse_gpu.rs | 2 +- src/scene/pipeline/mod.rs | 16 ++++++++++++++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/scene/pipeline/circle_gpu.rs b/src/scene/pipeline/circle_gpu.rs index ba47dcbbb..f38b46605 100644 --- a/src/scene/pipeline/circle_gpu.rs +++ b/src/scene/pipeline/circle_gpu.rs @@ -145,7 +145,7 @@ pub fn create_pipelines( }, depth_stencil: Some(wgpu::DepthStencilState { format: wgpu::TextureFormat::Depth24PlusStencil8, - depth_write_enabled: Some(true), + depth_write_enabled: Some(false), depth_compare: Some(wgpu::CompareFunction::LessEqual), stencil: content_stencil.clone(), bias: wgpu::DepthBiasState::default(), diff --git a/src/scene/pipeline/ellipse_gpu.rs b/src/scene/pipeline/ellipse_gpu.rs index 170af46ce..0ed65407e 100644 --- a/src/scene/pipeline/ellipse_gpu.rs +++ b/src/scene/pipeline/ellipse_gpu.rs @@ -145,7 +145,7 @@ pub fn create_pipelines( }, depth_stencil: Some(wgpu::DepthStencilState { format: wgpu::TextureFormat::Depth24PlusStencil8, - depth_write_enabled: Some(true), + depth_write_enabled: Some(false), depth_compare: Some(wgpu::CompareFunction::LessEqual), stencil: content_stencil.clone(), bias: wgpu::DepthBiasState::default(), diff --git a/src/scene/pipeline/mod.rs b/src/scene/pipeline/mod.rs index 7cd070c5a..930de4ba6 100644 --- a/src/scene/pipeline/mod.rs +++ b/src/scene/pipeline/mod.rs @@ -2449,11 +2449,17 @@ impl Pipeline { if instances.is_empty() { vec![] } else { + let mut sorted = instances.to_vec(); + sorted.sort_by(|a, b| { + a.params[2] + .partial_cmp(&b.params[2]) + .unwrap_or(std::cmp::Ordering::Equal) + }); vec![CircleGpu::from_instances( device, queue, "viewer.circles", - instances, + &sorted, )] } } @@ -2489,11 +2495,17 @@ impl Pipeline { if instances.is_empty() { vec![] } else { + let mut sorted = instances.to_vec(); + sorted.sort_by(|a, b| { + a.params[2] + .partial_cmp(&b.params[2]) + .unwrap_or(std::cmp::Ordering::Equal) + }); vec![EllipseGpu::from_instances( device, queue, "viewer.ellipses", - instances, + &sorted, )] } }