Files
llimphi/llimphi-surface/LEEME.md
T
Sergio 93253cc227 chore: refresco desde el monorepo — 27 crates nuevos (anim, lottie, svg, mesh, image, layer, test, wire-view, widgets rag-sidebar/router/lazy-list/rive-button) y sync de los 95 existentes
Regenerado con scripts/actualizar-standalone.py --llimphi. Vendoriza además
shared/{foreign-lottie,grafo}. Quedan fuera los crates acoplados al workspace
madre (wasm-*, video-plane, voxel-app/studio, allichay, plugin-host, shuma-term).
cargo check --workspace verde (112 miembros).
2026-07-25 20:57:22 +00:00

1.6 KiB

llimphi-surface

Read this in English: README.md.

Superficies externas dentro del bucle Elm.

Un ExternalSurface es una textura RGBA8 que vive en GPU y se pinta sobre un rect del frame Llimphi cada vez que la app lo expone vía View::gpu_paint_with. La fuente de bytes corre afuera del bucle Elm: un decoder de video, un capture de cámara, un raster de PDF, una textura raw producida por otro motor — cualquier productor que genere RGBA puede empujar frames con ExternalSurface::upload y ver el resultado en la próxima pasada de raster.

El crate provee:

  • ExternalSurface: dueño de la textura + render pipeline + bind group. upload(rgba, w, h) sube bytes y recrea la textura si w/h cambiaron.
  • ExternalSurface::view: helper que construye un View con gpu_paint_with ya conectado. La app sólo elige el Style del nodo (qué porción del layout ocupa).

Diseño

El pipeline es un textured-quad clásico: dos triángulos cubren el rect destino, el fragment shader samplea la textura externa con sampler bilineal. Las coordenadas NDC del quad se computan en GPU a partir de (rect, viewport) que viajan por uniform — por eso el callback necesita el viewport que llimphi-ui empezó a propagar en GpuPaintFn.

La textura intermedia donde Llimphi pinta vello es Rgba8Unorm (ver llimphi-hal::INTERMEDIATE_FORMAT). El pipeline emite Rgba8Unorm también — el target del render pass es esa misma intermedia con LoadOp::Load, así el fondo vello queda preservado.


Parte de llimphi — ver llimphi.