1
0
mirror of https://github.com/emilk/egui.git synced 2026-08-29 04:40:03 -04:00

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.
This commit is contained in:
Michael Grupp
2026-04-04 12:09:56 +02:00
committed by GitHub
parent c2b482ff7e
commit 0435d2a9a1
3 changed files with 40 additions and 5 deletions

View File

@@ -18,6 +18,9 @@ pub struct HarnessBuilder<State = ()> {
#[cfg(feature = "snapshot")]
pub(crate) default_snapshot_options: crate::SnapshotOptions,
#[cfg(feature = "wgpu")]
pub(crate) render_options: egui_wgpu::RendererOptions,
}
impl<State> Default for HarnessBuilder<State> {
@@ -35,6 +38,9 @@ impl<State> Default for HarnessBuilder<State> {
#[cfg(feature = "snapshot")]
default_snapshot_options: crate::SnapshotOptions::default(),
#[cfg(feature = "wgpu")]
render_options: egui_wgpu::RendererOptions::PREDICTABLE,
}
}
}
@@ -119,6 +125,16 @@ impl<State> HarnessBuilder<State> {
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<State> HarnessBuilder<State> {
/// 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.

View File

@@ -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);

View File

@@ -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 {