pub struct ReferenceRenderer { /* private fields */ }Expand description
Deterministic software reference used by contract tests. It is intentionally simple: sprites are solid, half-open rectangles in logical pixel space.
Implementations§
Source§impl ReferenceRenderer
impl ReferenceRenderer
Sourcepub fn new(target: TargetDescriptor) -> Result<Self, RenderError>
pub fn new(target: TargetDescriptor) -> Result<Self, RenderError>
Creates a bounded renderer-neutral reference target.
§Errors
Returns a target error when the descriptor is invalid.
Examples found in repository?
examples/corpus.rs (line 23)
12fn main() -> Result<(), Box<dyn std::error::Error>> {
13 println!("{{\"schema_version\":1,\"cases\":[");
14 let cases = [
15 ("overlap-square", synthetic_scene(16, 16)?, 50_000_u64),
16 ("unaligned-wide", synthetic_scene(31, 17)?, 50_000),
17 ("structural-fog-ui", structural_scene(48, 48)?, 75_000),
18 ("high-density-1024", dense_scene(128, 128)?, 250_000),
19 ];
20 for (index, (name, scene, maximum_cpu_micros)) in cases.into_iter().enumerate() {
21 let viewport = scene.viewport();
22 let started = Instant::now();
23 let frame = ReferenceRenderer::new(offscreen_target(viewport.width, viewport.height))?
24 .render(RenderRequest {
25 scene: &scene,
26 resources: synthetic_provider()?,
27 })?;
28 let elapsed_micros = u64::try_from(started.elapsed().as_micros()).unwrap_or(u64::MAX);
29 if elapsed_micros > maximum_cpu_micros {
30 return Err(format!(
31 "scenario {name} exceeded CPU budget: {elapsed_micros} > {maximum_cpu_micros} microseconds"
32 )
33 .into());
34 }
35 let semantic = frame
36 .semantic_ids
37 .iter()
38 .flat_map(|value| value.to_le_bytes())
39 .collect::<Vec<_>>();
40 let depth = frame
41 .depth
42 .iter()
43 .flat_map(|value| value.to_le_bytes())
44 .collect::<Vec<_>>();
45 println!(
46 "{}{{\"name\":\"{}\",\"width\":{},\"height\":{},\"clock_millis\":{},\"maximum_rgba_channel_difference\":1,\"performance\":{{\"maximum_cpu_micros\":{},\"sprite_count\":{},\"resource_requests\":{},\"uploaded_bytes\":{},\"vertex_count\":{},\"vertex_allocation_bytes\":{},\"target_allocation_bytes\":{}}},\"digests\":{{\"rgba8\":\"{}\",\"semantic_u32le\":\"{}\",\"depth_i16le\":\"{}\",\"coverage_u8\":\"{}\"}}}}",
47 if index == 0 { "" } else { "," },
48 name,
49 viewport.width,
50 viewport.height,
51 scene.clock_millis(),
52 maximum_cpu_micros,
53 scene.sprites().len(),
54 frame.metrics.resource_requests,
55 frame.metrics.uploaded_bytes,
56 frame.metrics.vertex_count,
57 frame.metrics.vertex_allocation_bytes,
58 frame.metrics.target_allocation_bytes,
59 digest(&frame.rgba8),
60 digest(&semantic),
61 digest(&depth),
62 digest(&frame.coverage),
63 );
64 }
65 println!("]}}");
66 Ok(())
67}Trait Implementations§
Source§impl Renderer for ReferenceRenderer
impl Renderer for ReferenceRenderer
fn target(&self) -> TargetDescriptor
Source§fn resize(&mut self, width: u32, height: u32) -> Result<(), RenderError>
fn resize(&mut self, width: u32, height: u32) -> Result<(), RenderError>
Changes logical target dimensions without changing target ownership. Read more
Source§fn render(
&mut self,
request: RenderRequest<'_>,
) -> Result<FrameOutput, RenderError>
fn render( &mut self, request: RenderRequest<'_>, ) -> Result<FrameOutput, RenderError>
Renders exactly one immutable scene revision. Read more
Auto Trait Implementations§
impl Freeze for ReferenceRenderer
impl RefUnwindSafe for ReferenceRenderer
impl Send for ReferenceRenderer
impl Sync for ReferenceRenderer
impl Unpin for ReferenceRenderer
impl UnsafeUnpin for ReferenceRenderer
impl UnwindSafe for ReferenceRenderer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more