تكثر النقاشات في المواقع العربية و الأجنبية المتعلقة بالجانب التقني من الألعاب حول OpenGL في الماضي، ثم صار الجدل يدور حول Vulkan، و دائماً ما نجد المقارنة معه DirectX (بالمناسبة هم يقصدون Direct3D) مشكلة النقاش حول هذا النوع من المواضيع افتقاره للصحة في أغلب الأحيان. تجد مجموعة من الأشخاص يتناقلون معلومات خاطئة بالكامل. جذر المشكلة بالأساس افتقار هؤلاء للمعلومات الأساسية التي يبنون عليها نقاشاتهم. ذكرت و أشدد على هذا بأن النقاشات في المواقع العربية و الأجنبية على حد سواء، لا فرق هنا. الذي دفعني لكتابة هذا الموضوع هو افتقار الويب العربي لمواضيع تقنية تتعلق بالألعاب، نظراً لقلة الاهتمام.

ماذا عن OpenGL و Vulkan؟

نظراً لأسبقية الصدور حسب الوقت، أبدأ بتعريف OpenGL و أتطرق له أولاً. لو أخذنا تعريف ويكيبيديا العربية لما هو OpenGL نجد التعريف الآتي:

مكتبة الرسوميات المفتوحة أو أوبن جي إل (Open Graphics Library) عبارة عن واجهة برمجة التطبيقات مستقلة المنصة (تعمل في عدة بيئات وعدة أنظمة تشغيل) متوافقة مع عدة لغات مصممة لإنتاج رسوميات الحاسب ثنائية الأبعاد وثلاثية الأبعاد.

جميل، أليس كذلك؟ لو أردنا البدء في البرمجة باستخدام أدوات مساعدة (مكتبات و أطر عمل و واجهات برمجية)، فإننا نحملها عبر مدير الحزم أو من الموقع الرسمي، لكن هذا لا ينطبق في حالة OpenGL. التعريف السابق ناقص و يحتاج إعادة صياغة حتى يصير معبراً أكثر.

كيف كانت البداية؟

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

في البداية كانت الرسوم ثلاثية الأبعاد تعتمد على المعالج المركزي CPU، و كانت الرسوم وحدها تثقل كاهل المعالج، إذا يخصص جزء كبير من قدرات المعالج في عملية رسم الإطارات. كلما تقدمت المعالجات و تطورت، تزداد معها قدرة المعالج على رسم إطارات أعلى، مما يحسن تجربة اللعب.

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

التفاصيل كثيرة حول بداية OpenGL ليس مهماً التطرق لا، لكن بداية OpenGL كانت تمثل الحل الأمثل للجميع، و هذا يشمل المطورين و اللاعبين. من جهة يعمل المطور على واجهة برمجية واحدة بدل التشتت في حال رغب في دعم كل بطاقات الرسوم، و من جهة أخرى يضمن اللاعب الاستفادة من البطاقة بغض النظر عن المصنع.

لكن ما هو OpenGL بالتحديد؟

نظراً لاختلاف المعالجات الرسومية في تصميمها الداخلي و تحفظ كل شركة على تقنياتها، يصعب تطوير برمجية تتلاءم مع كل هذه المعالجات، لذلك كان من الأسهل تعريف مواصفات specification تبين كيف تعمل وظائف الواجهة الرسومية. يختلف تنفيذ implementation الشركات المصنعة لهذه المواصفات، لكن المحصلة أنها تضمن نفس النتائج التي تعرفها المواصفات. تطور الشركات المصنعة للمعالجات الرسومية تعريفات هدفها ربط التعليمات البرمجية بالخصائص التي يقدمها المعالج. دعم OpenGL يأتي مضمناً مع تلك التعريفات. لو أعدنا تعريف OpenGL ليعبر أكثر عن فحواه، يصير التعريف الآتي:

مكتبة الرسوميات المفتوحة أو أوبن جي إل (Open Graphics Library) عبارة عن “مواصفات” واجهة برمجة التطبيقات مستقلة المنصة (تعمل في عدة بيئات وعدة أنظمة تشغيل) متوافقة مع عدة لغات مصممة لإنتاج رسوميات الحاسب ثنائية الأبعاد وثلاثية الأبعاد.

كل الطرق تؤدي إلى Vulkan

بداية تصميم OpenGL، كان ملائماً لمتطلبات الحوسبة في التسعينات. من التطورات التي حصلت هو تعدد الأنوية و مسارات المعالجة في المعالجات الحديثة. لم يكن OpenGL قد استفاد من هذا التطور. أضف لهذا وجود OpenGL ES الموجة للأنظمة المضمنة (الهواتف مثلاً)، و هذا مختلف تماماً على OpenGL الموجة للحواسيب. OpenGL نفسه مصمم ليكون سهلاً على المطورين، لا أن يعمل بأعلى كفاءة ممكنة. كل هذه المشكلات أدت للعمل على إنشاء مواصفات للحوسبة الرسومية عالية الأداء التي تستفيد من كل التطورات التي حصلت في مجال الحوسبة، و منها كانت بداية Vulkan.

لا حاجة لتعريف Vulkan مجدداً، لكن هي “مواصفات” واجهة برمجية للحوسبة عالية الأداء. الهدف من Vulkan الاستفادة من قدرة الحوسبة المتوازية، و هذا يشمل الاستفادة القصوى من المعالجات متعددة الأنوية، خصوصاً دعم تنفيذ عدة مهام بالتوازي. صممت Vulkan أيضاً لتكون شاملة جميع أنواع الأجهزة، و هذا يشمل الحواسيب و الهواتف و منصات الألعاب المختلفة.

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