عن المشروع

tessella هو مشروع مستقل بلغة Rust ينفذ واجهة أمامية لمواصفات MapLibre style. يقوم بكافة مهام الواجهة الأمامية للخريطة — تحليل الأنماط، وتقييم التعبيرات، وإدارة المصادر والبلاطات (tiles)، والشبكات والتخزين المؤقت، وتوليد التخطيطات والحاويات (buckets)، وأطالس الرموز (glyphs) والصور المصغرة (sprites)، ومعالجة التحويل والكاميرا، وتنسيق الرندرة — ولكنه لا يقوم بالرسم. بدلاً من ذلك، يصدر تدفق التقاط (capture stream): الهندسة، والزي الموحد (uniforms)، والأنسجة، وترتيب الرسم، وحالة الكاميرا في ABI غلاف مسطح. هذا الفصل يجعل الواجهة الأمامية خالية من GPU وبلغة Rust نقية، مما يسمح بالتجميع المتقاطع إلى aarch64 و riscv64 بدون مكدس رسوميات، بينما يصبح برنامج الرندرة مستهلكاً قابلاً للاستبدال. تكون الحالة مرتبطة بالعملية قدر الإمكان، ومرتبطة بالعرض (per-view) فقط عند الضرورة. يتم مشاركة نمط واحد، ومكدس مصادر الملفات، ومخزن البلاطات، ومجموعة الحاويات، وأطلس الرموز عبر العروض، لأن الحاويات مستقلة عن الكاميرا وتعيش استكمالات التكبير في الـ uniforms. تقتصر حالة العرض على التحويل، وقرارات التغطية، ووضع الرموز، وبعض كتل الـ uniform. يزعم المشروع أن أربعة عروض للخريطة تكلف تدفق هندسة واحد بالإضافة إلى أربعة تدفقات عرض صغيرة، مع بقاء عمليات الجلب وفك التشفير وبناء الحاويات ثابتة بغض النظر عن عدد العروض، مدعومة بعدادات CI. تكون حركة البيانات متناسبة مع التغيير: الخريطة المتوقفة تصدر صفر بايت، وحركة الكاميرا البحتة تصدر كتلة كاميرا، وفقط التغييرات الجوهرية تصدر هندسة. يستخدم نقل حلقة SPSC كتابات حالة مطلقة للأغلفة القابلة للدمج، مما يحد من الإشغال إذا تعطل المستهلك. تتضمن مساحة العمل صناديق (crates) للواجهة (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، بإصدار تسلسل قياسي لتدفق التقاط لنفس النمط والكاميرا، ويتم إجراء مقارنة (diff) بينهما. تغطي المقارنات الهندسة، ومخازن الـ uniform، والأنسجة، وأقنعة القص، وترتيب الرسام، وكتلة الكاميرا، حيث يتطابق الإسقاط بتطابق تام في جميع العناصر الستة عشر. يتم التحقق من التسلسل الخاص بنا فقط — زوج إعلان العرض وتحريره DR-18 — حيث يتم إعلان العرض قبل استخدامه، وتسبق الهندسة الأمر الذي يرسمها، ويسبق الأمر الكاميرا التي تسمي حقبتها. العرض المستقر يكتب صفر بايت. تم تجميد ABI التقاط، مع ترويسة C مولدة تحمل تأكيدات إزاحة لكل حقل تتوافق مع C11 و C++17. تم توثيق اختلافين متعمدين: ترتيب رؤوس مضلعات GeoJSON هو تدوير لمرجع C++ لأن mbgl تطبع الحلقات عبر wagyu، لذا تقارن المقارنة الحلقات كدورات (DR-19). أيضاً، يرفض الإسقاط الاتجاه (bearing) والميل (pitch) لأن المسبار غير مدور ولا يوجد شيء للتحقق من مسار الكواتيرنيون (quaternion) مقابله. المرحلة R1 — البلاطات المتجهة، والشبكة والتخزين المؤقت، وطبقة الخطوط، والروابط المعتمدة على البيانات، وآلة تعبيرات VM — لم تبدأ بعد. يوثق ملف plan.md التصميم المسجل في المراجعة 0.9. تشمل المستهلكات مستهلكاً مدعوماً بـ Filament و impeller-rs (إعادة تنفيذ Impeller بلغة Rust نقية) يستهلك على مستوى entity/HAL. تتطلب الخرائط خلفية تدعم SSBO — Vulkan حالياً، أو GLES 3.1+ إذا قام مستهلك بتنفيذ ذلك. riscv64 هو مسار إنتاج واختبار وتجميع متقاطع فقط؛ يمكن لجهاز VisionFive 2 بناء tessella ولكن لا يمكنه الرسم بها. يستخدم البناء مجموعة أدوات مثبتة في rust-toolchain.toml على Rust 1.94.1، وهو الإصدار الذي تشحنه Yocto wrynose (6.0) في oe-core. يتضمن CI مساراً مستقراً استشارياً. مسارات التجميع المتقاطع هي cargo check فقط لـ aarch64-unknown-linux-gnu و riscv64gc-unknown-linux-gnu. تستخدم الاختبارات cargo clippy و cargo test. توجد مراجع oracle الذهبية في tests/golden بحيث يمكن فحص جانب Rust بدون بناء C++. المرايا المشتقة من mbgl في tessella-capture-abi تأتي من شجرة maplibre-native مثبتة ومثبتة في المستودع؛ ويقوم cargo run لـ mbgl-codegen بإعادة توليدها أو فحصها. ترويسة C المسطحة في include/ يتم توليدها من تعريفات Rust مع تأكيدات ثابتة للحجم والمحاذاة وإزاحات الحقول. tessella مشروع مستقل، غير تابع لمنظمة MapLibre ولا مدعوم منها، ولا يستخدم مساحة الأسماء mln. الترخيص هو BSD-2-Clause.