Sobre o projeto

tessella é um projeto Rust independente que implementa um frontend para a especificação de estilo MapLibre. Ele realiza todo o trabalho de um frontend de mapa — parsing de estilos, avaliação de expressões, gerenciamento de fontes e tiles, rede e cache, geração de layout e buckets, atlas de glifos e sprites, manipulação de transformações e câmera, e orquestração de renderização — mas não desenha. Em vez disso, ele emite um fluxo de captura: geometria, uniforms, texturas, ordem de desenho e estado da câmera em uma ABI de envelope plano. Essa separação torna o frontend livre de GPU e puramente Rust, permitindo a cross-compilation para aarch64 e riscv64 sem uma stack gráfica, enquanto o renderizador torna-se um consumidor substituível. O estado é limitado ao escopo do processo onde possível e por view apenas quando necessário. Um único estilo, stack de fontes de arquivo, store de tiles, conjunto de buckets e atlas de glifos são compartilhados entre views, pois os buckets são independentes da câmera e a interpolação de zoom reside nos uniforms. O estado por view é limitado à transformação, decisões de cobertura, posicionamento de símbolos e alguns blocos de uniforms. O projeto afirma que quatro views de mapa custam um fluxo de geometria mais quatro pequenos fluxos de view, com buscas, decodificações e construções de buckets permanecendo constantes em relação à contagem de views, respaldado por contadores de CI. O tráfego é proporcional à mudança: um mapa estacionário emite zero bytes, movimento puro de câmera emite um bloco de câmera, e apenas a rotatividade (churn) emite geometria. Um transporte de anel SPSC usa escritas de estado absoluto para envelopes coalescentes, limitando a ocupação se o consumidor travar. O workspace inclui crates para a fachada (tessella, atualmente um stub de reserva de nome na versão 0.0.0), estilo (tessella-style), fontes (tessella-source), tiles (tessella-tile), armazenamento (tessella-storage), layout (tessella-layout), posicionamento (tessella-place), orquestração (tessella-orchestrate), ABI de captura (tessella-capture-abi) e manipulação de glifos (tessella-glyph). Apenas a crate tessella é publicada no crates.io; as demais estão com publish = false até conterem conteúdo. O status atual é R0 completo. O produtor emite seu fluxo completo para um estilo hermético. Uma implementação oráculo em C++, mbgl-capture-probe, emite uma serialização canônica do fluxo de captura para o mesmo estilo e câmera, e as duas são comparadas via diff. As comparações abrangem geometria, buffers de uniforms, texturas, máscaras de clip, ordem do pintor e o bloco da câmera, cuja projeção coincide bit a bit em todos os dezesseis elementos. Apenas a nossa — o par de declaração e liberação de view do DR-18 — é verificada em sequência: uma view é declarada antes do uso, a geometria precede a ordem que a desenha, e a ordem precede a câmera que nomeia sua época. Uma view estabilizada escreve zero bytes. A ABI de captura está congelada, com um cabeçalho C gerado contendo asserções de offset por campo que compilam tanto em C11 quanto em C++17. Duas diferenças deliberadas conhecidas estão documentadas: a ordem dos vértices de polígonos GeoJSON é uma rotação da do oráculo porque o mbgl normaliza anéis através do wagyu, portanto o diff compara anéis como ciclos (DR-19). Além disso, a projeção recusa bearing e pitch porque a probe não é rotacionada e não há nada para verificar contra um caminho de quatérnio. O R1 — vector tiles, rede e cache, a camada de linha, binders orientados a dados, a VM de expressões — ainda não começou. O arquivo plan.md documenta o design de registro na rev 0.9. Os consumidores incluem um consumidor baseado em Filament e o impeller-rs (uma reimplementação do Impeller em Rust puro) consumindo no nível de entidade/HAL. Mapas requerem um backend capaz de SSBO — Vulkan hoje, GLES 3.1+ se um consumidor implementar um. riscv64 é apenas uma via de produtor, soak e cross-compile; um VisionFive 2 pode buildar o tessella, mas não desenhar com ele. O build utiliza um toolchain fixado em rust-toolchain.toml para Rust 1.94.1, a versão que o Yocto wrynose (6.0) fornece no oe-core. O CI possui uma via estável consultiva. As vias de cross-compilation são apenas cargo check para aarch64-unknown-linux-gnu e riscv64gc-unknown-linux-gnu. Os testes usam cargo clippy e cargo test. Os dumps de referência do oráculo golden residem em tests/golden para que o lado Rust possa ser verificado sem um build C++. Espelhos derivados do mbgl gerados em tessella-capture-abi vêm de uma árvore maplibre-native fixada e estão commitados; um cargo run para mbgl-codegen os regenera ou verifica. O cabeçalho C plano em include/ é gerado a partir de definições Rust com asserções estáticas para tamanho, alinhamento e offsets de campo. tessella é independente, não é afiliado nem endossado pela organização MapLibre, e não utiliza o namespace mln. A licença é BSD-2-Clause.