প্রকল্প সম্পর্কে

tessella একটি স্বতন্ত্র Rust প্রজেক্ট যা MapLibre স্টাইল স্পেসিফিকেশনের জন্য একটি ফ্রন্টএন্ড ইমপ্লিমেন্ট করে। এটি ম্যাপ ফ্রন্টএন্ডের সমস্ত কাজ সম্পাদন করে — যেমন স্টাইল পার্সিং, এক্সপ্রেশন মূল্যায়ন, সোর্স এবং টাইলস ম্যানেজমেন্ট, নেটওয়ার্ক এবং ক্যাশিং, লেআউট এবং বাকেট জেনারেশন, গ্লিফ এবং স্প্রাইট অ্যাটলাস, ট্রান্সফর্ম এবং ক্যামেরা হ্যান্ডলিং এবং রেন্ডার অর্কেস্ট্রেশন — কিন্তু এটি নিজে কিছু ড্র (draw) করে না। পরিবর্তে, এটি একটি ক্যাপচার স্ট্রিম নির্গত করে: একটি ফ্ল্যাট এনভেলপ ABI-তে জ্যামিতি, ইউনিফর্ম, টেক্সচার, ড্র অর্ডার এবং ক্যামেরা স্টেট। এই পৃথকীকরণের ফলে ফ্রন্টএন্ডটি GPU-মুক্ত এবং পিওর Rust হয়ে ওঠে, ফলে এটি গ্রাফিক্স স্ট্যাক ছাড়াই aarch64 এবং riscv64-এ ক্রস-কম্পাইল করতে পারে, যেখানে রেন্ডারারটি একটি পরিবর্তনযোগ্য কনজ্যুমার হিসেবে কাজ করে। স্টেট যেখানে সম্ভব প্রসেস-স্কোপড এবং শুধুমাত্র প্রয়োজনীয় ক্ষেত্রে পার-ভিউ রাখা হয়েছে। একটি একক স্টাইল, ফাইল-সোর্স স্ট্যাক, টাইল স্টোর, বাকেট সেট এবং গ্লিফ অ্যাটলাস বিভিন্ন ভিউয়ের মধ্যে শেয়ার করা হয়, কারণ বাকেটগুলো ক্যামেরা-মুক্ত এবং জুম ইন্টারপোলেশন ইউনিফর্মে থাকে। পার-ভিউ স্টেট শুধুমাত্র ট্রান্সফর্ম, কভার ডিসিশন, সিম্বল প্লেসমেন্ট এবং কিছু ইউনিফর্ম ব্লকের মধ্যে সীমাবদ্ধ। প্রজেক্টটির দাবি অনুযায়ী, চারটি ম্যাপ ভিউয়ের জন্য একটি জ্যামিতি স্ট্রিম এবং চারটি ছোট ভিউ স্ট্রিমের প্রয়োজন হয়, যেখানে ফেচ, ডিকোড এবং বাকেট বিল্ড ভিউ সংখ্যার সাথে পরিবর্তিত হয় না, যা 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) করা হয়। এই তুলনাগুলো জ্যামিতি, ইউনিফর্ম বাফার, টেক্সচার, ক্লিপ মাস্ক, পেইন্টার অর্ডার এবং ক্যামেরা ব্লককে কভার করে, যার প্রজেকশন ১৬টি এলিমেন্টের প্রতিটিতে বিট-বাই-বিট মিলে যায়। শুধুমাত্র আমাদের ক্ষেত্রে — ভিউ ডিক্লারেশন এবং রিলিজ পেয়ার DR-18 — সিকোয়েন্স চেক করা হয়: ব্যবহারের আগে ভিউ ডিক্লেয়ার করা হয়, ড্র করার অর্ডারের আগে জ্যামিতি আসে এবং অর্ডারের আগে ক্যামেরা তার ইপোক নামিয়ে দেয়। একটি সেটলড ভিউ শূন্য বাইট লেখে। ক্যাপচার 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-এ থাকে যাতে C++ বিল্ড ছাড়াই Rust সাইড চেক করা যায়। tessella-capture-abi-তে জেনারেটেড mbgl-ডেরাইভড মিররগুলো একটি পিন করা maplibre-native ট্রি থেকে আসে এবং কমিট করা হয়েছে; mbgl-codegen-এর একটি cargo run এগুলো পুনরায় জেনারেট বা চেক করে। include/-এর ফ্ল্যাট C হেডারটি Rust ডেফিনিশন থেকে জেনারেট করা হয়েছে যেখানে সাইজ, অ্যালাইনমেন্ট এবং ফিল্ড অফসেটের জন্য স্ট্যাটিক অ্যাসারশন রয়েছে। tessella একটি স্বতন্ত্র প্রজেক্ট, এটি MapLibre অর্গানাইজেশনের সাথে যুক্ত বা তাদের দ্বারা অনুমোদিত নয় এবং এটি mln নেমস্পেস ব্যবহার করে না। লাইসেন্স হলো BSD-2-Clause।