بنية الرسومات

المعلومات التي يجب أن يعرفها كل مطوِّر عن مساحات العرض وSurfaceHolder وEGLSurface وSurfaceView وGLSurfaceView وSurfaceTexture وTextureView وSurfaceFlinger وVulkan

توضِّح هذه الصفحة العناصر الأساسية لبنية الرسومات على مستوى نظام Android وكيفية استخدامها من قِبل إطار عمل التطبيق ونظام الوسائط المتعددة. ينصبّ التركيز على كيفية نقل ذاكرات التخزين المؤقت للبيانات الرسومية عبر النظام. إذا كنت قد تساءلت يومًا عن سبب سلوك SurfaceView وTextureView بالطريقة التي يتصرفان بها، أو عن كيفية تفاعل surfaces وEGLSurface، فأنت في المكان الصحيح.

من المفترض أن تكون لديك بعض المعرفة بأجهزة Android وتطوير التطبيقات. لا تحتاج إلى معرفة تفصيلية عن إطار عمل التطبيق، ولا تتم الإشارة إلا إلى عدد قليل جدًا من طلبات بيانات واجهة برمجة التطبيقات، ولكن لا تتداخل المادة مع الوثائق العامة الأخرى. والهدف من ذلك هو تقديم تفاصيل عن الأحداث المهمة المرتبطة بعرض إطار للإخراج لمساعدتك في اتخاذ خيارات مدروسة عند تصميم تطبيق. ولتحقيق ذلك، نعمل من الأسفل إلى الأعلى، ونوضّح طريقة عمل فئات واجهة المستخدم بدلاً من كيفية استخدامها.

يتضمّن هذا القسم عدة صفحات تتناول كل شيء بدءًا من مواد الخلفية وتفاصيل HAL ووصولاً إلى حالات الاستخدام. يبدأ الدليل بشرح ملفّات التخزين المؤقت لرسومات Android، ويصف آلية التركيب والعرض، ثم ينتقل إلى الآليات ذات المستوى الأعلى التي توفّر البيانات لبرنامج التركيب. ننصح بقراءة الصفحات بالترتيب المذكور أدناه بدلاً من الانتقال إلى موضوع يبدو مثيرًا للاهتمام.

المكونات ذات المستوى المنخفض

  • BufferQueue و gralloc تربط فئة BufferQueue بين عنصر ينشئ وحدات تخزين مؤقتة لبيانات الرسومات (المُنشئ) وعنصر يقبل البيانات لعرضها أو معالجتها بشكلٍ إضافي (المستهلك). يتم تنفيذ عمليات تخصيص المخزن المؤقت من خلال أداة تخصيص الذاكرة gralloc التي يتم تنفيذها من خلال واجهة HAL الخاصة بالمورّد.
  • SurfaceFlinger، وHardware Composer، والشاشات الافتراضية يقبل SurfaceFlinger مخازن ข้อมูล من مصادر متعددة ويجمعها ويرسلها إلى الشاشة. تحدِّد واجهة برمجة التطبيقات (HAL) لبرنامج "مُنشئ الأجهزة" (HWC) الطريقة الأكثر فعالية لدمج ملفّات التخزين المؤقت مع الأجهزة المتاحة، وتوفِّر الشاشات الافتراضية ناتجًا مدمجًا داخل النظام (تسجيل الشاشة أو إرسال الشاشة عبر الشبكة).
  • Surface ولوحة الرسم و SurfaceHolder تُنشئ المساحة سطحًا ينتج قائمة انتظار للمخازن المؤقتة التي غالبًا ما يستخدمها SurfaceFlinger. عند العرض على سطح، تنتهي النتيجة في ذاكرة تخزين مؤقت تُرسَل إلى المستهلك. توفّر واجهات برمجة تطبيقات Canvas تنفيذًا للبرامج (مع دعم التسارع بالأجهزة) للرسم مباشرةً على سطح (بديل منخفض المستوى لـ OpenGL ES). أيّ شيء يتعلّق بالعرض يتضمن SurfaceHolder، وتتيح واجهات برمجة التطبيقات الخاصة به الحصول على مَعلمات السطح وضبطها، مثل الحجم والتنسيق.
  • EGLSurface و OpenGL ES OpenGL ES (GLES): تحدِّد هذه الواجهة واجهة برمجة تطبيقات لعرض الرسومات مصمّمة للدمج مع EGL، وهي مكتبة يمكنها إنشاء النوافذ والوصول إليها من خلال نظام التشغيل (لرسم المضلّعات المزخرفة، استخدِم طلبات GLES، ولعرض الرسومات على الشاشة، استخدِم طلبات EGL). تتناول هذه الصفحة أيضًا ANativeWindow، وهو مكافئ C/C++ لفئة Java Surface المستخدَمة لإنشاء سطح EGL window من الرمز البرمجي الأصلي.
  • Vulkan ‫Vulkan هي واجهة برمجة تطبيقات متعددة المنصات ذات تكلفة منخفضة للرسومات الثلاثية الأبعاد العالية الأداء. مثل OpenGL ES، يوفّر Vulkan أدوات لإنشاء رسومات عالية الجودة في الوقت الفعلي في التطبيقات. تشمل مزايا Vulkan تقليل النفقات العامة لوحدة المعالجة المركزية ودعم لغة SPIR-V Binary Intermediate.

المكوّنات عالية المستوى

  • SurfaceView و GLSurfaceView تجمع SurfaceView بين مساحة عرض وعرض. يُجمِّع SurfaceFlinger (وليس التطبيق) مكوّنات عرض SurfaceView، ما يتيح عرضها من سلسلة مهام أو عملية منفصلة وعزلها عن عرض واجهة المستخدم للتطبيق. توفّر GLSurfaceView فئات مساعدة لإدارة سياقات EGL والتواصل بين مؤشرات الترابط والتفاعل مع دورة نشاط التطبيق (ولكن ليس مطلوبًا استخدام GLES).
  • SurfaceTexture: يجمع SurfaceTexture بين مساحة العرض وسطح GLES لإنشاء BufferQueue يكون تطبيقك هو المستخدِم له. عندما يضيف مُنشئ محتوى عنصر تخزين مؤقت جديد إلى "قائمة الانتظار"، يُرسِل إشعارًا إلى تطبيقك الذي بدوره يُطلق عنصر التخزين المؤقت الذي كان يحتفظ به سابقًا، ويحصل على عنصر التخزين المؤقت الجديد من "قائمة الانتظار"، ويُجري طلبات إلى EGL لإتاحة عنصر التخزين المؤقت لـ GLES كنسيج خارجي. أضاف نظام التشغيل Android 7.0 ميزة تشغيل فيديوهات رسومات كثيفة وآمنة تتيح لوحدة معالجة الرسومات إجراء معالجة لاحقة لمحتوى الفيديو المحمي.
  • TextureView: يجمع TextureView بين عرض وSurfaceTexture. يُغلِّف TextureView عنصر SurfaceTexture ويتحمّل مسؤولية الاستجابة لطلبات إعادة الاتصال و الحصول على وحدات تخزين مؤقتة جديدة. عند الرسم، يستخدم TextureView محتويات آخر مخزن مؤقت تم استلامه كمصدر بياناته، ويتم عرضها في أي مكان وبأي شكل تشير إليه حالة العرض. يتم تنفيذ تركيب العرض دائمًا باستخدام GLES، ما يعني أنّ التعديلات على المحتوى قد تؤدي إلى إعادة رسم عناصر العرض الأخرى أيضًا.