Sobre el proyecto

tessella es un proyecto independiente de Rust que implementa un frontend para la especificación de estilo de MapLibre. Realiza todo el trabajo de un frontend de mapas —análisis de estilos, evaluación de expresiones, gestión de fuentes y teselas, red y almacenamiento en caché, generación de diseño y buckets, atlas de glifos y sprites, manejo de transformación y cámara, y orquestación de renderizado— pero no dibuja. En su lugar, emite un flujo de captura: geometría, uniformes, texturas, orden de dibujo y estado de la cámara en un ABI de envoltorio plano. Esta separación hace que el frontend sea independiente de la GPU y puramente Rust, permitiendo la compilación cruzada a aarch64 y riscv64 sin una pila gráfica, mientras que el renderizador se convierte en un consumidor intercambiable. El estado tiene un alcance de proceso siempre que sea posible y por vista solo cuando sea necesario. Un único estilo, pila de fuentes de archivo, almacén de teselas, conjunto de buckets y atlas de glifos se comparten entre vistas, ya que los buckets no dependen de la cámara y la interpolación de zoom reside en los uniformes. El estado por vista se limita a la transformación, decisiones de cobertura, colocación de símbolos y algunos bloques de uniformes. El proyecto afirma que cuatro vistas de mapa cuestan un flujo de geometría más cuatro flujos de vista pequeños, manteniendo constantes las recuperaciones, decodificaciones y construcciones de buckets según el número de vistas, respaldado por contadores de CI. El tráfico es proporcional al cambio: un mapa estacionario emite cero bytes, el movimiento puro de la cámara emite un bloque de cámara y solo la rotación emite geometría. Un transporte de anillo SPSC utiliza escrituras de estado absoluto para envoltorios coalescibles, limitando la ocupación si el consumidor se detiene. El espacio de trabajo incluye crates para la fachada (tessella, actualmente un stub de reserva de nombre en la versión 0.0.0), estilo (tessella-style), fuentes (tessella-source), teselas (tessella-tile), almacenamiento (tessella-storage), diseño (tessella-layout), colocación (tessella-place), orquestación (tessella-orchestrate), ABI de captura (tessella-capture-abi) y manejo de glifos (tessella-glyph). Solo la crate tessella está publicada en crates.io; el resto tienen publish = false hasta que contengan contenido. El estado actual es R0 completado. El productor emite su flujo completo para un estilo hermético. Una implementación oráculo en C++, mbgl-capture-probe, emite una serialización canónica del flujo de captura para el mismo estilo y cámara, y ambos se comparan mediante diff. Las comparaciones cubren geometría, buffers de uniformes, texturas, máscaras de recorte, orden de dibujo y el bloque de cámara, cuya proyección coincide bit a bit en los dieciséis elementos. Solo lo nuestro —el par de declaración y liberación de vista de DR-18— se verifica en secuencia: una vista se declara antes de su uso, la geometría precede al orden que la dibuja y el orden precede a la cámara que nombra su época. Una vista asentada escribe cero bytes. El ABI de captura está congelado, con un encabezado C generado que contiene aserciones de desplazamiento por campo que compilan tanto en C11 como en C++17. Se documentan dos diferencias deliberadas conocidas: el orden de los vértices del polígono GeoJSON es una rotación del oráculo porque mbgl normaliza los anillos a través de wagyu, por lo que el diff compara los anillos como ciclos (DR-19). Además, la proyección rechaza el rumbo (bearing) y la inclinación (pitch) porque la sonda no está rotada y no hay nada contra qué verificar una ruta de cuaterniones. R1 —teselas vectoriales, red y caché, la capa de línea, binders basados en datos, la VM de expresiones— no ha comenzado. El archivo plan.md documenta el diseño de registro en la rev 0.9. Los consumidores incluyen uno respaldado por Filament e impeller-rs (una reimplementación de Impeller en Rust puro) que consume a nivel de entidad/HAL. Los mapas requieren un backend capaz de SSBO —Vulkan hoy, GLES 3.1+ si un consumidor implementa uno. riscv64 es solo una vía de productor, soak y compilación cruzada; un VisionFive 2 puede compilar tessella pero no dibujar con él. La compilación utiliza una cadena de herramientas fijada en rust-toolchain.toml a Rust 1.94.1, la versión que Yocto wrynose (6.0) distribuye en oe-core. La CI lleva una vía estable consultiva. Las vías de compilación cruzada son solo cargo check para aarch64-unknown-linux-gnu y riscv64gc-unknown-linux-gnu. Las pruebas utilizan cargo clippy y cargo test. Los volcados de referencia del oráculo dorado residen en tests/golden para que el lado de Rust pueda verificarse sin una compilación de C++. Los espejos derivados de mbgl generados en tessella-capture-abi provienen de un árbol de maplibre-native fijado y están commitados; un cargo run para mbgl-codegen los regenera o verifica. El encabezado C plano en include/ se genera a partir de definiciones de Rust con aserciones estáticas para tamaño, alineación y desplazamientos de campo. tessella es independiente, no está afiliado ni respaldado por la organización MapLibre, y no utiliza el espacio de nombres mln. La licencia es BSD-2-Clause.