From 0435d2a9a1417b9f3ff726d377656ce81b02d538 Mon Sep 17 00:00:00 2001 From: Michael Grupp Date: Sat, 4 Apr 2026 12:09:56 +0200 Subject: [PATCH] Add `HarnessBuilder::with_render_options()` (closes #7630) (#8060) Allows to override the default `PREDICTABLE` render options, e.g. if it's desired to create snapshots with the exact texture options used by the app. See #7630 for details / examples. --- crates/egui_kittest/src/builder.rs | 19 ++++++++++++++++++- crates/egui_kittest/src/lib.rs | 5 +++++ crates/egui_kittest/src/wgpu.rs | 21 +++++++++++++++++---- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/crates/egui_kittest/src/builder.rs b/crates/egui_kittest/src/builder.rs index b33e37e39..a81e9dca0 100644 --- a/crates/egui_kittest/src/builder.rs +++ b/crates/egui_kittest/src/builder.rs @@ -18,6 +18,9 @@ pub struct HarnessBuilder { #[cfg(feature = "snapshot")] pub(crate) default_snapshot_options: crate::SnapshotOptions, + + #[cfg(feature = "wgpu")] + pub(crate) render_options: egui_wgpu::RendererOptions, } impl Default for HarnessBuilder { @@ -35,6 +38,9 @@ impl Default for HarnessBuilder { #[cfg(feature = "snapshot")] default_snapshot_options: crate::SnapshotOptions::default(), + + #[cfg(feature = "wgpu")] + render_options: egui_wgpu::RendererOptions::PREDICTABLE, } } } @@ -119,6 +125,16 @@ impl HarnessBuilder { self } + /// Configures the [`egui_wgpu::RendererOptions`] used by this harness. + /// + /// The default is [`egui_wgpu::RendererOptions::PREDICTABLE`]. + #[cfg(feature = "wgpu")] + #[inline] + pub fn with_render_options(mut self, options: egui_wgpu::RendererOptions) -> Self { + self.render_options = options; + self + } + /// Set the [`TestRenderer`] to use for rendering. /// /// By default, a [`LazyRenderer`] is used. @@ -133,7 +149,8 @@ impl HarnessBuilder { /// This sets up a [`crate::wgpu::WgpuTestRenderer`] with the default setup. #[cfg(feature = "wgpu")] pub fn wgpu(self) -> Self { - self.renderer(crate::wgpu::WgpuTestRenderer::default()) + let test_renderer = crate::wgpu::WgpuTestRenderer::with_render_options(self.render_options); + self.renderer(test_renderer) } /// Enable wgpu rendering with the given setup. diff --git a/crates/egui_kittest/src/lib.rs b/crates/egui_kittest/src/lib.rs index b9f7dc7c2..9b2319caf 100644 --- a/crates/egui_kittest/src/lib.rs +++ b/crates/egui_kittest/src/lib.rs @@ -116,6 +116,11 @@ impl<'a, State> Harness<'a, State> { #[cfg(feature = "snapshot")] default_snapshot_options, + + // rustfmt adds this weird indentation below. + // See: https://github.com/rust-lang/rustfmt/issues/5920 + #[cfg(feature = "wgpu")] + render_options: _, } = builder; let ctx = ctx.unwrap_or_default(); ctx.set_theme(theme); diff --git a/crates/egui_kittest/src/wgpu.rs b/crates/egui_kittest/src/wgpu.rs index a9f0de9ad..45152e81e 100644 --- a/crates/egui_kittest/src/wgpu.rs +++ b/crates/egui_kittest/src/wgpu.rs @@ -58,7 +58,10 @@ pub fn default_wgpu_setup() -> egui_wgpu::WgpuSetup { egui_wgpu::WgpuSetup::CreateNew(setup) } -pub fn create_render_state(setup: WgpuSetup) -> egui_wgpu::RenderState { +pub fn create_render_state( + setup: WgpuSetup, + options: egui_wgpu::RendererOptions, +) -> egui_wgpu::RenderState { // No display handle needed for headless testing — we don't present to a window. let instance = pollster::block_on(setup.new_instance()); @@ -69,7 +72,7 @@ pub fn create_render_state(setup: WgpuSetup) -> egui_wgpu::RenderState { }, &instance, None, - egui_wgpu::RendererOptions::PREDICTABLE, + options, )) .expect("Failed to create render state") } @@ -89,14 +92,17 @@ impl WgpuTestRenderer { /// Create a new [`WgpuTestRenderer`] with the default setup. pub fn new() -> Self { Self { - render_state: create_render_state(default_wgpu_setup()), + render_state: create_render_state( + default_wgpu_setup(), + egui_wgpu::RendererOptions::PREDICTABLE, + ), } } /// Create a new [`WgpuTestRenderer`] with the given setup. pub fn from_setup(setup: WgpuSetup) -> Self { Self { - render_state: create_render_state(setup), + render_state: create_render_state(setup, egui_wgpu::RendererOptions::PREDICTABLE), } } @@ -115,6 +121,13 @@ impl WgpuTestRenderer { ); Self { render_state } } + + /// Create a new [`WgpuTestRenderer`] with custom render options. + pub fn with_render_options(options: egui_wgpu::RendererOptions) -> Self { + Self { + render_state: create_render_state(default_wgpu_setup(), options), + } + } } impl crate::TestRenderer for WgpuTestRenderer {