इस प्रोजेक्ट के बारे में
tessella एक स्वतंत्र Rust प्रोजेक्ट है जो MapLibre स्टाइल स्पेसिफिकेशन के लिए एक फ्रंटएंड लागू करता है। यह मैप फ्रंटएंड के सभी कार्य करता है — स्टाइल पार्सिंग, एक्सप्रेशन इवैल्यूएशन, सोर्स और टाइल्स का प्रबंधन, नेटवर्क और कैशिंग, लेआउट और बकेट जनरेशन, ग्लिफ और स्प्राइट एटलस, ट्रांसफॉर्म और कैमरा हैंडलिंग, और रेंडर ऑर्केस्ट्रेशन — लेकिन यह कुछ भी ड्रा नहीं करता है। इसके बजाय, यह एक कैप्चर स्ट्रीम उत्सर्जित करता है: एक फ्लैट एनवेलप ABI में ज्योमेट्री, यूनिफॉर्म्स, टेक्सचर्स, ड्रा ऑर्डर और कैमरा स्टेट। यह अलगाव फ्रंटएंड को GPU-मुक्त और शुद्ध Rust बनाता है, जिससे यह बिना ग्राफिक्स स्टैक के aarch64 और riscv64 पर क्रॉस-कंपाइल हो सकता है, जबकि रेंडरर एक स्वैपेबल कंज्यूमर बन जाता है।
स्टेट जहाँ तक संभव हो प्रोसेस-स्कोप होता है और केवल आवश्यकता होने पर प्रति-व्यू होता है। एक सिंगल स्टाइल, फाइल-सोर्स स्टैक, टाइल स्टोर, बकेट सेट और ग्लिफ एटलस व्यूज़ के बीच साझा किए जाते हैं, क्योंकि बकेट कैमरा-मुक्त होते हैं और ज़ूम इंटरपोलेशन यूनिफॉर्म्स में रहता है। प्रति-व्यू स्टेट ट्रांसफॉर्म, कवर निर्णयों, सिंबल प्लेसमेंट और कुछ यूनिफॉर्म ब्लॉक्स तक सीमित है। प्रोजेक्ट का दावा है कि चार मैप व्यूज़ की लागत एक ज्योमेट्री स्ट्रीम और चार छोटे व्यू स्ट्रीम्स के बराबर होती है, जिसमें फेच, डिकोड और बकेट बिल्ड्स व्यू काउंट के साथ स्थिर रहते हैं, जिसका समर्थन CI काउंटर्स द्वारा किया जाता है। ट्रैफिक बदलाव के समानुपाती होता है: एक पार्क किया हुआ मैप शून्य बाइट्स उत्सर्जित करता है, शुद्ध कैमरा मोशन एक कैमरा ब्लॉक उत्सर्जित करता है, और केवल चर्न ज्योमेट्री उत्सर्जित करता है। एक SPSC रिंग ट्रांसपोर्ट कोलैसेबल एनवेलप्स के लिए एब्सोल्यूट स्टेट राइट्स का उपयोग करता है, जो कंज्यूमर के रुकने पर ऑक्यूपेंसी को सीमित करता है।
वर्कस्पेस में फसाड (tessella, वर्तमान में वर्जन 0.0.0 पर एक नाम-रिजर्वेशन स्टब), स्टाइल (tessella-style), सोर्स (tessella-source), टाइल्स (tessella-tile), स्टोरेज (tessella-storage), लेआउट (tessella-layout), प्लेसमेंट (tessella-place), ऑर्केस्ट्रेशन (tessella-orchestrate), कैप्चर ABI (tessella-capture-abi), और ग्लिफ हैंडलिंग (tessella-glyph) के लिए क्रेट्स शामिल हैं। केवल tessella क्रेट crates.io पर प्रकाशित है; बाकी तब तक publish = false हैं जब तक कि उनमें कंटेंट न हो।
वर्तमान स्थिति R0 पूर्ण है। प्रोड्यूसर एक हर्मेटिक स्टाइल के लिए अपना पूर्ण स्ट्रीम उत्सर्जित करता है। एक C++ ओरेकल कार्यान्वयन, mbgl-capture-probe, उसी स्टाइल और कैमरा के लिए कैप्चर स्ट्रीम का एक कैनोनिकल सीरियलाइजेशन उत्सर्जित करता है, और दोनों का डिफ किया जाता है। तुलनाओं में ज्योमेट्री, यूनिफॉर्म बफ़र्स, टेक्सचर्स, क्लिप मास्क, पेंटर ऑर्डर और कैमरा ब्लॉक शामिल हैं, जिसका प्रोजेक्शन सभी सोलह तत्वों में बिट-दर-बिट मेल खाता है। केवल हमारा — DR-18 का व्यू डिक्लेरेशन और रिलीज़ पेयर — सीक्वेंस पर चेक किया जाता है: उपयोग से पहले एक व्यू घोषित किया जाता है, ज्योमेट्री उस ऑर्डर से पहले आती है जो इसे ड्रा करता है, और ऑर्डर उस कैमरा से पहले आता है जो इसके युग (epoch) का नाम रखता है। एक सेटल्ड व्यू शून्य बाइट्स लिखता है। कैप्चर ABI फ्रोजन है, जिसमें एक जनरेटेड C हेडर प्रति-फील्ड ऑफसेट असर्शन ले जाता है जो C11 और C++17 दोनों के रूप में कंपाइल होता है।
दो ज्ञात जानबूझकर किए गए अंतर प्रलेखित हैं: GeoJSON पॉलीगॉन वर्टेक्स ऑर्डर ओरेकल का रोटेशन है क्योंकि mbgl wagyu के माध्यम से रिंग्स को नॉर्मलाइज़ करता है, इसलिए डिफ रिंग्स की तुलना साइकिल्स के रूप में करता है (DR-19)। साथ ही, प्रोजेक्शन बेयरिंग और पिच से इनकार करता है क्योंकि प्रोब अनरोटेटेड है और क्वाटरनियन पाथ के विरुद्ध चेक करने के लिए कुछ भी नहीं है। R1 — वेक्टर टाइल्स, नेटवर्क और कैश, लाइन लेयर, डेटा-ड्रिवन बाइंडर्स, एक्सप्रेशन VM — अभी शुरू नहीं हुआ है। plan.md rev 0.9 पर रिकॉर्ड के डिज़ाइन को प्रलेखित करता है।
कंज्यूमर्स में एक Filament-बैक्ड कंज्यूमर और impeller-rs (एक शुद्ध-Rust Impeller री-इम्प्लीमेंटेशन) शामिल हैं जो एंटिटी/HAL स्तर पर कंज्यूम करते हैं। मैप्स के लिए SSBO-सक्षम बैकएंड की आवश्यकता होती है — आज Vulkan, और GLES 3.1+ यदि कोई कंज्यूमर इसे लागू करता है। riscv64 केवल एक प्रोड्यूसर, सोक और क्रॉस-कंपाइल लेन है; एक VisionFive 2 tessella को बिल्ड कर सकता है लेकिन इसके साथ ड्रा नहीं कर सकता।
बिल्डिंग के लिए rust-toolchain.toml में Rust 1.94.1 पर पिन किया गया टूलचेन उपयोग किया जाता है, जो Yocto wrynose (6.0) oe-core में शिप करता है। CI एक एडवाइजरी स्टेबल लेन ले जाता है। क्रॉस-कंपाइलेशन लेन aarch64-unknown-linux-gnu और riscv64gc-unknown-linux-gnu के लिए केवल cargo check हैं। टेस्ट cargo clippy और cargo test का उपयोग करते हैं। गोल्डन ओरेकल रेफरेंस डंप tests/golden में रहते हैं ताकि Rust साइड को C++ बिल्ड के बिना चेक किया जा सके। tessella-capture-abi में जनरेटेड mbgl-व्युत्पन्न मिरर्स एक पिन किए गए maplibre-native ट्री से आते हैं और कमिट किए गए हैं; mbgl-codegen के लिए एक cargo run उन्हें पुन: उत्पन्न या चेक करता है। include/ में फ्लैट C हेडर Rust डेफिनिशन से जनरेट किया गया है जिसमें साइज, एलाइनमेंट और फील्ड ऑफसेट्स के लिए स्टैटिक असर्शन हैं।
tessella स्वतंत्र है, MapLibre संगठन से संबद्ध या समर्थित नहीं है, और mln नेमस्पेस का उपयोग नहीं करता है। लाइसेंस BSD-2-Clause है।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.