tawasuyu

tawasuyu/llimphi

Sovereign retained-mode GPU UI framework in Rust (wgpu+vello+taffy+parley), Elm loop, 40+ widgets.

Rust 614Markdown 274TOML 149RON 310606 Definiciones

⎇ main llimphi-cpu/src/lib.rs Rust · 60 líneas · 2.9 KB Historia Quién tocó qué crudo

chore: refresco desde el monorepo — vello 0.9 / wgpu 29, 120 miembros d251eb32b · Sergio ·

1// =============================================================================
2//  llimphi-cpu :: Llimphi sin GPU  (W1 de 03_ukupacha/wawa/PLAN-LLIMPHI.md)
3// -----------------------------------------------------------------------------
4//  Durante dos años la doctrina fue que Llimphi no podía correr en wawa porque
5//  arrastra wgpu/winit/std. El spike de W0 la tumbó: TODO el stack de Linebender
6//  —vello_cpu, vello_common, peniko, kurbo— es `no_std`, y con SSE encendido
7//  cruza a `x86_64-wawa` sin tocarle una línea. Este crate es lo que faltaba en
8//  el medio.
9//
10//  El problema concreto: `llimphi-compositor` pinta contra `vello::Scene`, que
11//  es un BUFFER CODIFICADO para que después la GPU lo devore de un saque.
12//  `vello_cpu` no tiene `Scene` — su API es imperativa y con estado. Las dos
13//  mitades no se enchufan.
14//
15//  La pieza tiene tres partes, y ninguna es lista:
16//
17//    escena  — una `Escena` que expone los OCHO métodos de `vello::Scene` que el
18//              compositor usa, con la MISMA firma, y en vez de dibujar los
19//              graba. Grabar es lo que hace posible `append`, sin el cual el
20//              compositor no puede reciclar subárboles cacheados.
21//    pintor  — reproduce esa lista contra un `vello_cpu::RenderContext` y deja
22//              un `Pixmap`.
23//    lienzo  — vuelca el `Pixmap` al framebuffer real, con su stride y su orden
24//              de canales.
25//
26//  `no_std + alloc` de nacimiento, no como concesión: el consumidor final es el
27//  kernel de wawa, donde no hay `std` que valga. En Linux compila igual —un
28//  crate `no_std` es perfectamente utilizable desde uno con `std`— y la feature
29//  `std` sólo agrega la detección de SIMD en tiempo de ejecución.
30//
31//  Lo que este crate NO hace, a propósito: texto. El shaping vive en
32//  `llimphi-text`, que sigue atado a `std` y a las fuentes del sistema — es W2,
33//  la fase más cara del plan, y mezclarla acá sería empantanar las dos.
34// =============================================================================
35
36// `no_std` cuando se pide el perfil bare-metal (`--no-default-features
37// --features libm`). Con `std` —el default, y el único perfil coherente cuando
38// vello convive con vello_cpu; ver el porqué en Cargo.toml— y bajo `cargo test`,
39// se usa la stdlib. Lo que se compila para wawa es el primer perfil, y ése es
40// `no_std` puro.
41#![cfg_attr(not(any(feature = "std", test)), no_std)]
42
43extern crate alloc;
44
45pub mod escena;
46pub mod lienzo;
47pub mod pintor;
48
49pub use escena::{Escena, Forma, Glifo, Orden};
50pub use lienzo::{volcar, FormatoPixel};
51pub use pintor::Pintor;
52
53// Se reexporta el sustrato para que quien use este crate no tenga que declarar
54// `vello_cpu` por su cuenta ni —peor— arriesgarse a traer OTRA versión de peniko
55// y terminar con dos tipos `Color` incompatibles que el compilador reporta como
56// «expected Color, found Color».
57pub use vello_cpu::{kurbo, peniko, Pixmap};
58
59#[cfg(test)]
60mod pruebas;