À propos du projet
tessella est un projet Rust indépendant qui implémente un frontend pour la spécification de style MapLibre. Il effectue tout le travail d'un frontend de carte — analyse des styles, évaluation des expressions, gestion des sources et des tuiles, réseau et mise en cache, génération de mise en page et de buckets, atlas de glyphes et de sprites, gestion de la transformation et de la caméra, et orchestration du rendu — mais il ne dessine rien. Au lieu de cela, il émet un flux de capture : géométrie, uniformes, textures, ordre de dessin et état de la caméra dans une ABI d'enveloppe plate. Cette séparation rend le frontend indépendant du GPU et écrit en Rust pur, permettant ainsi la compilation croisée vers aarch64 et riscv64 sans pile graphique, tandis que le moteur de rendu devient un consommateur interchangeable.
L'état est limité au processus lorsque cela est possible et par vue uniquement si nécessaire. Un style unique, une pile de sources de fichiers, un magasin de tuiles, un ensemble de buckets et un atlas de glyphes sont partagés entre les vues, car les buckets sont indépendants de la caméra et l'interpolation du zoom réside dans les uniformes. L'état par vue est limité à la transformation, aux décisions de couverture, au placement des symboles et à quelques blocs d'uniformes. Le projet affirme que quatre vues de carte coûtent un flux de géométrie plus quatre petits flux de vue, les récupérations, décodages et constructions de buckets restant constants quel que soit le nombre de vues, avec l'appui de compteurs CI. Le trafic est proportionnel au changement : une carte immobile n'émet aucun octet, un mouvement pur de la caméra émet un bloc de caméra, et seule la modification de données émet de la géométrie. Un transport en anneau SPSC utilise des écritures d'état absolues pour des enveloppes fusionnables, limitant l'occupation si le consommateur stagne.
L'espace de travail comprend des crates pour la façade (tessella, actuellement un stub de réservation de nom en version 0.0.0), le style (tessella-style), les sources (tessella-source), les tuiles (tessella-tile), le stockage (tessella-storage), la mise en page (tessella-layout), le placement (tessella-place), l'orchestration (tessella-orchestrate), l'ABI de capture (tessella-capture-abi) et la gestion des glyphes (tessella-glyph). Seule la crate tessella est publiée sur crates.io ; les autres ont l'option publish = false jusqu'à ce qu'elles contiennent du contenu.
Le statut actuel est R0 terminé. Le producteur émet son flux complet pour un style hermétique. Une implémentation oracle en C++, mbgl-capture-probe, émet une sérialisation canonique du flux de capture pour le même style et la même caméra, et les deux sont comparés. Les comparaisons couvrent la géométrie, les tampons d'uniformes, les textures, les masques de découpage, l'ordre du peintre et le bloc de caméra, dont la projection correspond bit pour bit sur les seize éléments. Seule la nôtre — la paire déclaration et libération de vue de DR-18 — est vérifiée sur la séquence : une vue est déclarée avant utilisation, la géométrie précède l'ordre qui la dessine, et l'ordre précède la caméra nommant son époque. Une vue stabilisée n'écrit aucun octet. L'ABI de capture est figée, avec un en-tête C généré portant des assertions de décalage par champ qui compilent en C11 et C++17.
Deux différences délibérées connues sont documentées : l'ordre des sommets des polygones GeoJSON est une rotation de celui de l'oracle car mbgl normalise les anneaux via wagyu, donc la différence compare les anneaux comme des cycles (DR-19). De plus, la projection refuse le cap et l'inclinaison car la sonde n'est pas pivotée et il n'y a rien pour vérifier un chemin de quaternion. R1 — tuiles vectorielles, réseau et cache, couche de ligne, binders pilotés par les données, VM d'expression — n'a pas commencé. Le fichier plan.md documente la conception à la révision 0.9.
Les consommateurs incluent un consommateur basé sur Filament et impeller-rs (une réimplémentation d'Impeller en Rust pur) consommant au niveau entité/HAL. Les cartes nécessitent un backend capable de gérer les SSBO — Vulkan aujourd'hui, GLES 3.1+ si un consommateur en implémente un. riscv64 est uniquement une voie de production, de test et de compilation croisée ; un VisionFive 2 peut compiler tessella mais ne peut pas dessiner avec.
La construction utilise une chaîne d'outils fixée dans rust-toolchain.toml à Rust 1.94.1, la version livrée par Yocto wrynose (6.0) dans oe-core. La CI comporte une voie stable consultative. Les voies de compilation croisée sont limitées à cargo check pour aarch64-unknown-linux-gnu et riscv64gc-unknown-linux-gnu. Les tests utilisent cargo clippy et cargo test. Les dumps de référence de l'oracle doré se trouvent dans tests/golden afin que le côté Rust puisse être vérifié sans construction C++. Les miroirs dérivés de mbgl générés dans tessella-capture-abi proviennent d'un arbre maplibre-native fixé et sont commités ; un cargo run pour mbgl-codegen les régénère ou les vérifie. L'en-tête C plat dans include/ est généré à partir de définitions Rust avec des assertions statiques pour la taille, l'alignement et les décalages de champs.
tessella est indépendant, n'est pas affilié ni approuvé par l'organisation MapLibre, et n'utilise pas l'espace de noms mln. La licence est BSD-2-Clause.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.