Skia ایک اعلیٰ کارکردگی والی 2D گرافکس لائبریری ہے جو اوپن سورس ہے، C++ میں لکھی گئی ہے، اور Flutter کے بنیادی رینڈرنگ انجن کے طور پر کام کرتی ہے۔ یہ اعلیٰ سطحی ویجٹ اور انٹرفیس عناصر کو اسکرین پر پکسلز میں تبدیل کرنے کی ذمہ دار ہے، CPU کے ذریعے سافٹ ویئر رینڈرنگ اور OpenGL، Vulkan اور Metal کے ذریعے ہارڈویئر ایکسلریشن کو سپورٹ کرتی ہے۔ Skia Documentation (2025) کے مطابق، Skia روزانہ Android، Chrome اور Flutter آلات پر 2 بلین سے زیادہ رینڈر شدہ فریموں پر کارروائی کرتی ہے۔
خلاصہ
Skia ایک کراس پلیٹ فارم 2D گرافکس لائبریری ہے جسے Google نے تیار کیا ہے اور BSD لائسنس کے تحت دستیاب ہے۔ یہ ہندسی اشکال، متن، تصاویر اور سائے کھینچنے کے لیے ایک متحد API فراہم کرتی ہے، جو بنیادی گرافکس بیک اینڈ سے تجرید کرتی ہے۔ Skia C++ میں لکھی گئی ہے اور موبائل فونز سے لے کر سرورز تک وسیع پیمانے پر آلات پر کام کرنے کے لیے بہتر بنائی گئی ہے۔
Skia کی تاریخ 2005 میں Skia Inc. کمپنی کی ملکیتی لائبریری کے طور پر شروع ہوئی۔ 2007 میں Google نے اسے حاصل کیا، سورس کو کھولا اور اپنی مصنوعات میں استعمال کرنا شروع کیا۔ آج، Skia Google Chrome (Chrome OS سمیت)، Android (ورژن 4.0 سے) اور یقیناً Flutter کا بنیادی گرافکس انجن ہے۔ لائبریری کو Google ٹیم برقرار رکھتی ہے اور مسلسل بہتر کیا جاتا ہے: نئے بیک اینڈ، کارکردگی کی اصلاحات اور جدید گرافکس API کے لیے سپورٹ شامل کی جاتی ہے۔
Skia کی اہم خصوصیت یہ ہے کہ یہ صرف ابتدائی شکلیں کھینچنے کے لیے افعال کا مجموعہ نہیں ہے۔ یہ ایک مکمل گرافکس پائپ لائن ہے جس میں وکر راسٹرائزیشن (پاتھ)، اینٹی ایلیاسنگ، ماسک اوورلے، شفافیت کا انتظام اور رنگ کی اصلاح شامل ہے۔ Skia PNG، JPEG، WebP اور GIF تصویری فارمیٹس کو سپورٹ کرتی ہے، اور HarfBuzz انجن کے ذریعے گلائف شیپنگ کے لیے متن رینڈر کر سکتی ہے۔
Cairo (GTK میں استعمال شدہ) یا Quartz 2D (macOS میں استعمال شدہ) کے برعکس، Skia کو شروع سے ہی مختلف گرافکس API والے متعدد پلیٹ فارمز پر کام کرنے کے لیے ڈیزائن کیا گیا تھا۔ یہ اسے Flutter جیسے کراس پلیٹ فارم فریم ورکس میں برتری دیتا ہے۔ Cairo سافٹ ویئر رینڈرنگ پر مرکوز ہے، جبکہ Skia نے شروع سے ہی GPU ایکسلریشن کو سپورٹ کیا ہے، جو انٹرفیس اینیمیشن کے لیے اہم ہے۔
Skia کا فن تعمیر ایک کثیر پرت پائپ لائن کے طور پر بنایا گیا ہے، جہاں ہر پرت گرافکس کمانڈز کو پکسلز میں تبدیل کرنے کے ایک مخصوص مرحلے کی ذمہ دار ہے۔ یہ ڈھانچہ بنیادی گرافکس API سے آزاد طور پر بالائی تہوں کے دوبارہ استعمال کی اجازت دیتا ہے۔
سب سے اوپر کی پرت — Canvas API — ڈویلپر کو ڈرائنگ کے لیے ایک تجرید فراہم کرتی ہے۔ drawRect، drawCircle، drawPath، drawText طریقے ہندسی پیرامیٹرز اور اسٹائل (رنگ، شفافیت، تبدیلیاں) لیتے ہیں۔ Canvas ان کمانڈز کو آپریشنز کے ایک سلسلے میں تبدیل کرتا ہے جو Skia Pipeline — ایک اندرونی کمانڈ گراف جو عملدرآمد سے پہلے بہتر کیا جاتا ہے — کو بھیجے جاتے ہیں۔
درمیانی پرت — Surface اور Device — ہدف بفر کا انتظام کرتی ہے جس میں رینڈرنگ ہوتی ہے۔ Surface مخصوص سائز، رنگ کی جگہ اور بیک اینڈ کی قسم کے ساتھ بنایا جاتا ہے۔ Device ایک مخصوص رینڈرنگ بیک اینڈ کو نافذ کرتا ہے: CPU راسٹرائزر (Raster)، OpenGL (GL)، Vulkan (Vk) یا Metal (Mt)۔ Device میں مخصوص بیک اینڈ کے لیے ڈرائنگ کے ہر آپریشن کی بہتر عملدرآمد شامل ہے۔
سب سے نیچے کی پرت — Ganesha (GPU بیک اینڈ) — ہارڈویئر ایکسلریٹڈ رینڈرنگ کو نافذ کرتی ہے۔ Ganesha پاتھ راسٹرائزیشن، گریڈینٹ فل اور ایفیکٹ اوورلے کے لیے GPU استعمال کرتا ہے۔ یہ کمانڈز کو بیچوں میں جمع کرتا ہے اور GPU اسٹیٹ سوئچنگ کو کم سے کم کرتا ہے۔ ہر گرافکس API کا اپنا Ganesha نفاذ ہے: OpenGL کے لیے Skia GL، Vulkan کے لیے Skia Vulkan، Metal کے لیے Skia Metal۔
Skia اثرات بیان کرنے کے لیے اپنی شیڈر زبان SkSL (Skia Shading Language) استعمال کرتی ہے۔ SkSL کوڈ SPIR-V (انٹرمیڈیٹ نمائندگی) میں مرتب ہوتا ہے، جو پھر بیک اینڈ کے مخصوص شیڈر فارمیٹ (GLSL, HLSL, MSL) میں ترجمہ ہوتا ہے۔ یہ پلیٹ فارم سے قطع نظر گرافکس اثرات کو بیان کرنے کا ایک متحد طریقہ فراہم کرتا ہے۔
Flutter تمام پلیٹ فارمز پر بنیادی رینڈرنگ انجن کے طور پر Skia استعمال کرتا ہے: Android، iOS، Web، Windows، macOS اور Linux۔ جب کوئی Flutter ایپ فریم رینڈر کرتی ہے، ویجٹ RenderObject ٹری میں تبدیل ہو جاتے ہیں، جو پھر Engine پرت (C++ میں) کو بھیجے جاتے ہیں، اور Engine حتمی رینڈرنگ کے لیے Skia استعمال کرتا ہے۔
فریم رینڈرنگ کے عمل میں کئی مراحل شامل ہیں۔ پہلے، Flutter Engine ایک Display List بناتا ہے — Canvas API کالز کا ایک سلسلہ جو بیان کرتا ہے کہ کیا اور کیسے کھینچنا ہے۔ یہ فہرست پھر Skia کو بھیجی جاتی ہے، جو آپریشنز کو پارٹیشنز (اسکرین ایریاز) میں تقسیم کرتی ہے، گہرائی کے مطابق ترتیب دیتی ہے اور متعلقہ رینڈرنگ بیک اینڈ کو بھیجتی ہے۔ GPU ایکسلریشن خودکار طور پر فعال ہو جاتا ہے اگر Skia کوئی دستیاب گرافکس API ڈھونڈ لیتی ہے۔
Flutter میں Skia کے اہم فوائد میں سے ایک Flutter Impeller Preview ہے — شیڈرز کا پیشگی جائزہ لینے کی صلاحیت۔ Skia پہلے استعمال کے وقت شیڈرز کو مرتب کرتا ہے، جو تاخیر (shader jank) کا سبب بن سکتا ہے۔ اس مسئلے کو حل کرنے کے لیے، Flutter Impeller — ایک نئے رینڈرنگ انجن کی طرف منتقل ہو رہا ہے، لیکن Skia مستحکم Flutter ورژنز کے لیے بنیادی انتخاب ہے۔
Flutter Layer Tree کے تصور کا استعمال کرتا ہے — پرتوں کا ایک درخت، جہاں ہر پرت UI کا ایک حصہ ظاہر کرتی ہے۔ Skia ہر پرت کے لیے ڈرائنگ کمانڈز وصول کرتا ہے اور تعین کرتا ہے کہ آیا متعدد پرتوں کو ایک رینڈرنگ پاس میں یکجا کیا جا سکتا ہے۔ پرت کمپوزٹنگ ایک پیچیدہ کام ہے، کیونکہ ہر پکسل کے لیے شفافیت اور بلینڈ موڈز کو مدنظر رکھنا ہوتا ہے، جنہیں Skia GPU شیڈرز کے ذریعے نافذ کرتا ہے۔
Skia HarfBuzz (شیپنگ) اور ICU (یونیکوڈ) لائبریریوں کے ساتھ انضمام کے ذریعے متن رینڈر کرتا ہے۔ Flutter میں، ہر ٹیکسٹ ویجٹ ایک Paragraph آبجیکٹ بناتا ہے جو متن کو گلائف کھینچنے کے لیے Skia کمانڈز کی ایک سیریز میں تبدیل کرتا ہے۔ Skia سب پکسل اینٹی ایلیاسنگ، فونٹ ہنٹنگ اور SkUnicode لائبریری کے ذریعے ایموجی کے ساتھ کام کرنے کو سپورٹ کرتا ہے۔
Skia کی کارکردگی سالوں کی اصلاح اور متعدد تکنیکوں کے امتزاج کا نتیجہ ہے: کمانڈ بیچنگ، ٹیکسچر کیشنگ اور GPU سیاق و سباق کی تبدیلی کو کم سے کم کرنا۔ یہ Flutter کے لیے انتہائی اہم ہے، کیونکہ ہر فریم کو 16 ms (60 FPS) یا 8 ms (120 FPS) میں رینڈر ہونا چاہیے۔
| تکنیک | وضاحت | بہتری |
|---|---|---|
| بیچنگ | ملتے جلتے آپریشنز کو ایک ڈرا کال میں گروپ کرنا | 3x تک |
| ٹیکسچر کیشے | GPU میں پہلے سے لوڈ ٹیکسچر کا دوبارہ استعمال | 2x تک |
| Atlas | چھوٹے ٹیکسچر کو ایک بڑے ٹیکسچر اٹلس میں یکجا کرنا | 1.5x تک |
| مؤخر رینڈرنگ | دوبارہ ترتیب کے ساتھ تاخیر سے کمانڈ پر عملدرآمد | 2x تک |
| شیڈر پری کمپائلیشن | Spark/Dart کے لیے شیڈرز کی پیشگی ترتیب | 4x تک |
Flutter ٹیم کے بینچ مارکس کے مطابق، درمیانی رینج کے آلات (Qualcomm Snapdragon 700 series) پر GPU ایکسلریشن کے ساتھ Skia کا استعمال اسکرین پر 30+ ویجٹس والے پیچیدہ انٹرفیس کو رینڈر کرتے وقت مستحکم 60 FPS فراہم کرتا ہے۔ سافٹ ویئر رینڈرنگ (CPU) کے ساتھ، کارکردگی 40–60% گر جاتی ہے، لیکن سادہ اسکرینوں کے لیے قابل قبول رہتی ہے۔
Flutter میں Skia کی بنیادی کارکردگی کا مسئلہ shader jank (شیڈر لیگ) ہے۔ جب اسکرین پر اثرات کے پہلے سے نامعلوم امتزاج کے ساتھ کوئی نیا بصری عنصر ظاہر ہوتا ہے، Skia فوری طور پر ایک نیا شیڈر مرتب کرتا ہے۔ ترتیب میں 50–200 ms لگ سکتے ہیں، اس دوران ایپ فریم چھوڑتی ہے۔ یہ خاص طور پر حسب ضرورت سجاوٹ والی لمبی فہرستوں کو اسکرول کرتے وقت نمایاں ہوتا ہے۔ Google اس مسئلے کو Impeller میں حل کر رہا ہے، ایک نیا رینڈرنگ انجن جو شیڈرز کو پہلے سے مرتب کرتا ہے۔
Skia پلیٹ فارمز کی ایک وسیع رینج کو سپورٹ کرتا ہے، ہر ایک اپنا رینڈرنگ بیک اینڈ استعمال کرتا ہے۔ بیک اینڈ کا انتخاب ہدف پلیٹ فارم اور دستیاب گرافکس API کی بنیاد پر Flutter Engine بلڈ کے دوران طے کیا جاتا ہے۔
Android پر، Skia OpenGL ES (تمام آلات پر) اور Vulkan (Android 7.0+ Vulkan سپورٹ والے آلات پر) کے ذریعے کام کرتا ہے۔ بیک اینڈ کا انتخاب خودکار ہے: Vulkan کو ترجیح دی جاتی ہے کیونکہ یہ کم ڈرائیور لیٹنسی فراہم کرتا ہے۔ Android HWUI (Hardware Accelerated UI) کے ذریعے سسٹم UI رینڈرنگ کے لیے بھی Skia استعمال کرتا ہے، جو Skia کو صرف Flutter کا حصہ نہیں بلکہ آپریٹنگ سسٹم کا حصہ بناتا ہے۔
iOS پر، Skia Metal استعمال کرتا ہے — Apple کی ملکیتی گرافکس API۔ Metal کم سے کم اوور ہیڈ کے ساتھ GPU تک نچلی سطح تک رسائی فراہم کرتا ہے۔ Metal (2014) کے متعارف ہونے سے پہلے، iOS پر Skia OpenGL ES استعمال کرتا تھا، لیکن موجودہ Flutter ورژنز میں Metal iOS کے لیے واحد GPU بیک اینڈ ہے، جو OpenGL کے مقابلے میں 30% تک کارکردگی بہتری فراہم کرتا ہے۔
ڈیسک ٹاپ پر، Skia OpenGL (macOS, Linux) اور Direct3D 12 (Windows) استعمال کرتا ہے۔ Direct3D 12 کے لیے سپورٹ Windows کے لیے Flutter 3.13 میں شامل کی گئی تھی اور Windows پر OpenGL کے مقابلے میں نمایاں کارکردگی بہتری فراہم کرتی ہے۔ Skia پرانے گرافکس ڈرائیورز کے ساتھ پسماندہ مطابقت کے لیے Windows پر ANGLE (Direct3D پر OpenGL) کے ذریعے سافٹ ویئر رینڈرنگ بھی سپورٹ کرتا ہے۔
Flutter for Web میں، Skia WebAssembly (Emscripten کے ذریعے) میں مرتب ہوتا ہے اور WebGL کے ذریعے رینڈر کرتا ہے۔ اس موڈ میں، Skia مقامی کوڈ استعمال کیے بغیر مکمل طور پر براؤزر میں کام کرتا ہے۔ Skia کے WebGL ورژن کی کارکردگی مقامی بیک اینڈ سے کم ہے، لیکن زیادہ تر ویب ایپلیکیشنز کے لیے جدید براؤزرز پر WebGL ہارڈویئر ایکسلریشن کے ساتھ 60 FPS حاصل کیا جاتا ہے۔
اکثر پوچھے گئے سوالات
Shader jank شیڈرز کی فوری ترتیب کی وجہ سے رینڈرنگ میں تاخیر ہے۔ جب Skia بصری اثرات کا ایک نیا امتزاج دیکھتا ہے، تو یہ ایک شیڈر مرتب کرتا ہے، جس میں 50–200 ms لگ سکتے ہیں، اس دوران فریم چھوٹ جاتے ہیں۔ یہ مسئلہ Impeller میں شیڈرز کی پیشگی ترتیب سے حل کیا جاتا ہے۔
ہاں، Skia کو ایک آزاد گرافکس لائبریری کے طور پر استعمال کیا جا سکتا ہے۔ یہ Google Chrome، Android، Mozilla Firefox (Skia پرت کے ذریعے) اور اعلیٰ کارکردگی والی 2D گرافکس کی ضرورت والے پروجیکٹس میں استعمال ہوتا ہے۔ Skia API C++، Python اور دیگر زبانوں میں بائنڈنگ کے ذریعے دستیاب ہے۔
Flutter Skia کا ایک فورک (عام طور پر Google کے مرکزی ذخیرے سے تازہ ترین مستحکم commit) استعمال کرتا ہے۔ ورژن ہر Flutter Engine ریلیز کے ساتھ اپ ڈیٹ ہوتا ہے۔ موجودہ commit GitHub پر flutter/engine ذخیرے میں DEPS فائل میں پایا جا سکتا ہے۔
Skia شیڈرز کو رن ٹائم پر مرتب کرتا ہے، جو shader jank کا سبب بنتا ہے۔ Impeller شیڈرز کو آف لائن (پیشگی) مرتب کرتا ہے، SPIR-V استعمال کرتا ہے اور براہ راست Vulkan/Metal/Direct3D 12 کے ذریعے کام کرتا ہے۔ Impeller شیڈر لیگ سے متاثر نہیں ہوتا اور زیادہ پیش قیاسی کارکردگی فراہم کرتا ہے۔
Skia بذات خود ایک اینیمیشن انجن نہیں ہے — یہ انفرادی فریموں کی رینڈرنگ کا ذمہ دار ہے۔ Flutter میں اینیمیشن فریم ورک کی سطح (AnimationController, Tween) پر لاگو کی جاتی ہے، جبکہ Skia Canvas API اور ہارڈویئر ایکسلریشن کا استعمال کرتے ہوئے ہر فریم کی تیز رینڈرنگ کو یقینی بناتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔