OpenGL
- الكاتب الأصلي
- Joey de Vries
- المقالة الأصلية
- OpenGL
- ترجمة
- بين قوسين
قبل البدء، يجب أن تعرف أولا ما هي OpenGL فعليا. OpenGL تعتبر ك API (واجهة برمجة التطبيقات (Application Programming Interface))، وتوفر عددا هائلا من ال functions التي نستطيع استعمالها لإنشاء وتعديل الرسومات والصور. لكن، في الحقيقة هي ليست API بحد ذاتها، بل مجرد تخصيصات (specification) مطورة من مجموعة كرونوس (Khronos).
إن كنت مهتما برسومات الحاسب وكل مجالاتها (برمجة الألعاب، تطبيقات رسومات الحاسب، التصوير العلمي، المحاكاة والواقع الافتراضي .. إلخ)، فإن اسم مجموعة كرونوس سيتكرر كثيرا في مسيرتك!
هذه المجموعة هي من يطور التخصيصات (specifications) والمعايير (standards) لأشهر وأكثر API الرسومات (graphics) استخداما، مثل OpenGL، WebGL و Voulkan. وهم أيضا من وضع والمعايير لعدة API الحوسبة العالية الأداء (High Performance Comuting (HPC)) مثل OpenCL للبرمجة ال Parallel في الوحدة المعالجة المركزية (CPU) وكروت الشاشة (GPU)، و SPIR وهي اللغة الوسيطة ل API الرسومات وال HPC. وأيضا gITF، وهي التخصيصات لكيفية التعامل مع أصول وموديل ال 3D بكفاءة للألعاب مثلا.
مجموعة كرونوس هي مجموعة من عدة شركات وجامعات. أشهر الشركات المشاركة في صناعة القرارات فيما يخص أي تعديل على التخصيصات هي:
- AMD
- Apple
- Epic Games
- Huwawei
- intel
- NVIDIA
- SAMSUNG
- Sony
تخصيصات OpenGL تخصص وتحدد المخرجات بالضبط لكل function وكيف يجب أن تستعمل. بعد ذلك، كل مطور يطبق هذه التخصيصات ويقرر كيفية تطبيق هذه ال functions. بما أن التخصيصات لا تتدخل بتفاصيل كتابة هذه ال functions، فإن المطورين قد يختلفون في كيفية تنفيذهم لهذه ال functions. لكن هذا ليس مهما ما دامت تخضع للتخصيصات الموضوعة مسبقا (وبالتالي، فبالنسبة لك كمبرمج، فلن تعرف الفرق).
من يقوم فعليا بتطوير مكتبات OpenGL هم في الغالب مصنعي كروت الشاشة (مثل NVIDIA أو AMD). كل كرت شاشة تشتريه يدعم إصدارا معينا من OpenGL. عندما تشتري جهاز Apple، فإن Apple هي من تكتب المكتبة الخاصة ب OpenGL وهي من تقوم بصيانتها. وعند استخدامك لنظام Linux، فسترى عدة نسخ من موردي الرسومات أو الهواة لهذه المكتبات. وهذا يعني أنه عندما يكون هنالك “خلل” في OpenGL أو عندما تظهر شيئا لا يجب عليها إظهاره، فهذا غالبا خطأ من مصنعي كروت الشاشة أو من مطوري هذه المكتبة.
بما أن مصعني كروت الشاشة هم من يقوم في أغلب الوقت بتطوير وصيانة مكتبة OpenGL لجهازك، فقم بتحديث ال card driver عند مواجهتك لأي خلل في OpenGL. يحتوي ال card driver على أحدث نسخة من OpenGL مدعومة من كرت الشاشة. لذلك ينصح بتحديثها دوريا.
كرونوس تستضيف كل مستندات التخصيصات لكل نسخ OpenGL. القارئ المهتم يستطيع الحصول على تخصيصات إصدار OpenGL 3.3 هنا. وهو الإصدار المستخدم في هذه السلسلة. يمكنك قراءة هذا المستند في حال ودتت معرفة التفاصيل الدقيقة في كيفية عمل OpenGL وال functions الخاصة بها (لاحظ أن المستند يشرح ما الذي يجب أن يتوفر، وليس كيف يتم تطبيقه فعليا).
Core-profile vs Immediate mode
في الماضي، كان استعمال OpenGL يعني البرمجة بالوضع الفوري (immediate mode) (يسمى أيضا بخط الوظائف الثابت (fixed function pipeline)) وهي طريقة برمجة رسومات سهلة جدا. أغلب مميزات OpenGL التي يوفرها الوضع الفوري كانت مخفية داخل المكتبة، فلم يكن بإمكان المبرمجين استعمالهم وبالتالي لم يملكوا السيطرة المطلقة على كيفية تنفيذ OpenGL للكثير من الأوامر. مع مرور الوقت، اصبحت التخصيصات أكثر مرونة بسبب رغبة المبرمجين والمطورين في المرونة والقدرة على السيطرة على الرسومات التي يبرمجونها. الوضع الفوري سهل الاستعمال والفهم، ولكنه أيضا غير فعال. ولهذا بدأت التخصيصات بالتخلي عن وظائفه من الإصدار 3.2 فصاعدا وبدأت بحث المطورين على البرمجة بوضع ال core-profile، وهو الجزء من التخصيصات الذي حذف جميع ال functionality القديمة التي كانت متوفرة بالوضع الفوري.
عند استعمال وضع ال core-profile، تجبرنا OpenGL على استعمال الممارسات الحديثة. عند القيام بمحاولة استعمال احد ال functions القديمة مثلا، تتوقف OpenGL عن الرسم وتعتبره خطأ (raise an error). أكبر مميزات تعلم OpenGL الحديثة هي المرونة الشديدة والأداء العالي الفعال. لكن، تعلمها أصعب من النسخة القديمة. وذلك لأن وضع الفوري جرد الكثير من العمليات التي تنفذها OpenGL فعليا فهذا جعل تعلمها أسهل، ولكنه بالمقابل جعل فهم كيفية قيام OpenGL بتنفيذ الأوامر أصعب. النسخة الحديثة تجبر المبرمج على فهم آلية عمل OpenGL وبرمجة الرسومات. وعلى الرغم من أن هذا أصعب قليلا، إلا أنه يوفر مرونة أكبر وأداء أعلى. والأهم من ذلك هو الفهم الحقيقي لبرمجة رسومات الحاسب.
ولذلك كتبت هذه السلسة ب core-profile OpenGL الإصدار 3.3. على الرغم من أنها أصعب من الوضع الفوري، فهي استثمار يستحق العناء.
هنالك إصدارات أعلى من OpenGL متوفرة الآن (أعلى إصدار متوفر هو 4.6 حاليا). وقد تتساءل: لماذا أتعلم الإصدار 3.3 بما أن 4.6 متوفر؟ الإجابة بسيطة جدا: جميع الإصدارات بدءا من 3.3 تضيف مميزات إضافية في كل إصدار دون تعديل كيفية عمل OpenGL الفعلية؛ فالإصدارات الأحدث إما تحسن من اداء ال functions المتاحة قليلا، أو تضيف عدة طرائق مفيدة أكثر لتنفيذ نفس المهام. ونتيجة لذلك، فإن كل المفاهيم والأساليب مشتركة لجميع إصدارات OpenGL الحديثة، أي أن تعلم الإصدار 3.3 صالح كليا. متى ما أصبحت أكثر تمكنا أو خبرة، يمكنك بكل سهولة استعمال اصدار بعينه للتمتع بأحدث المميزات ل OpenGL.
أحدث كروت الشاشة هي الوحيدة القادرة على تشغيل أحدث الخصائص من أحدث نسخ OpenGL. ولذا يلجأ المبرمجون عادة للبرمجة بإصدارات أقدم، وقد يوفرون مميزات أحدث إصدار OpenGL لمن يملك كرت شاشة حديث.
قد نستعمل بعضا من المميزات الحديثة في السلسة، وسنخبرك حينها بأنها ميزة من إصدارات OpenGL الأحدث.