# llimphi-surface *Read this in English: [README.md](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](../LEEME.md).