tawasuyu/llimphi
Sovereign retained-mode GPU UI framework in Rust (wgpu+vello+taffy+parley), Elm loop, 40+ widgets.
chore: refresco desde el monorepo — vello 0.9 / wgpu 29, 120 miembros
1//! Vuelca los patrones compartidos rasterizados **por CPU** (el camino de wawa)
2//! a archivos RGBA8 crudos, para compararlos contra el camino GPU.
3//!
4//! No es un demo: es la mitad de un test que no puede vivir en un solo binario.
5//! Los dos backends de `llimphi-text` (`cpu` y `vello`) son excluyentes, así que
6//! nadie puede linkear los dos y comparar en proceso. Esta mitad escribe; la
7//! otra —`llimphi-test/tests/cpu_vs_gpu.rs`— lee y compara.
8//!
9//! ```bash
10//! cargo run --manifest-path 02_ruway/llimphi/llimphi-wawa/Cargo.toml \
11//! --no-default-features --features std --example volcar_patron -- <dir>
12//! ```
13//!
14//! Lo cómodo es `./scripts/check-llimphi-cpu-vs-gpu.sh`, que corre las dos.
15
16use llimphi_cpu::lienzo::FormatoPixel;
17use llimphi_wawa::Cascara;
18
19include!("../../escena_patron.rs");
20
21fn main() {
22 let dir = std::env::args().nth(1).unwrap_or_else(|| {
23 eprintln!("uso: volcar_patron <dir-de-salida>");
24 std::process::exit(2);
25 });
26 let dir = std::path::PathBuf::from(dir);
27 std::fs::create_dir_all(&dir).expect("crear el directorio de salida");
28
29 let mut cascara = Cascara::new(ANCHO as u16, ALTO as u16);
30 for (nombre, vista) in patrones::<()>() {
31 cascara.fotograma(vista);
32 let mut px = vec![0u8; (ANCHO * ALTO * 4) as usize];
33 cascara.volcar(&mut px, (ANCHO * 4) as usize, FormatoPixel::Rgba8);
34 let ruta = dir.join(format!("{nombre}.rgba"));
35 std::fs::write(&ruta, &px).expect("escribir el volcado");
36 println!("{nombre}: {} bytes → {}", px.len(), ruta.display());
37 }
38 println!("patrones volcados: {}", patrones::<()>().len());
39}