pub fn structural_scene(width: u32, height: u32) -> Result<SceneBundle, Error>Expand description
Builds a synthetic structural/tall/multipart/fog/cutaway/UI contract scene.
ยงErrors
Returns a scene validation error for dimensions below the fixture contract.
Examples found in repository?
examples/corpus.rs (line 17)
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}