1# llimphi-surface
2
3*Read this in English: [README.md](README.md).*
4
5Superficies externas dentro del bucle Elm.
6
7Un `ExternalSurface` es una textura RGBA8 que vive en GPU y se pinta
8sobre un rect del frame Llimphi cada vez que la app lo expone vía
9`View::gpu_paint_with`. La fuente de bytes corre afuera del bucle
10Elm: un decoder de video, un capture de cámara, un raster de PDF,
11una textura raw producida por otro motor — cualquier productor que
12genere RGBA puede empujar frames con `ExternalSurface::upload` y
13ver el resultado en la próxima pasada de raster.
14
15El crate provee:
16
17- `ExternalSurface`: dueño de la textura + render pipeline + bind
18 group. `upload(rgba, w, h)` sube bytes y recrea la textura si
19 `w`/`h` cambiaron.
20- `ExternalSurface::view`: helper que construye un `View` con
21 `gpu_paint_with` ya conectado. La app sólo elige el `Style` del
22 nodo (qué porción del layout ocupa).
23
24## Diseño
25
26El pipeline es un textured-quad clásico: dos triángulos cubren el
27rect destino, el fragment shader samplea la textura externa con
28sampler bilineal. Las coordenadas NDC del quad se computan en GPU
29a partir de `(rect, viewport)` que viajan por uniform — por eso
30el callback necesita el `viewport` que `llimphi-ui` empezó a
31propagar en `GpuPaintFn`.
32
33La textura intermedia donde Llimphi pinta vello es `Rgba8Unorm`
34(ver `llimphi-hal::INTERMEDIATE_FORMAT`). El pipeline emite
35`Rgba8Unorm` también — el target del render pass es esa misma
36intermedia con `LoadOp::Load`, así el fondo vello queda preservado.
37
38---
39
40Parte de **llimphi** — ver [llimphi](../LEEME.md).
LEEME.md
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.