لغة تظليل OpenGL

تُسند ألعاب الفيديو عمليات حساب العرض إلى وحدة معالجة الرسومات (GPU) عبر OpenGL في الوقت الفعلي. تُكتب برامج التظليل بلغة OpenGL Shading Language وتُجمّع، ثم تُنفّذ البرامج المُجمّعة على وحدة معالجة الرسومات.

لغة تظليل OpenGL ( GLSL ) هي لغة تظليل عالية المستوى ذات بنية مبنية على لغة البرمجة C. وقد تم تطويرها بواسطة مجلس مراجعة هندسة OpenGL (OpenGL ARB ) لمنح المطورين تحكمًا مباشرًا أكبر في مسار معالجة الرسومات دون الحاجة إلى استخدام لغة التجميع الخاصة بـ ARB أو لغات خاصة بالأجهزة.

خلفية

مع تطور بطاقات الرسومات، أُضيفت ميزات جديدة تتيح مرونة أكبر في مسار العرض على مستوى الرؤوس والقطع . وتتحقق إمكانية البرمجة على هذا المستوى باستخدام مُظلِّلات القطع والرؤوس .

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

تم تقديم لغة GLSL في الأصل كامتداد لـ OpenGL 1.4، ثم أُدرجت رسميًا في نواة OpenGL 2.0 في عام 2004 من قِبل OpenGL ARB. وكان هذا أول تعديل رئيسي لـ OpenGL منذ إنشاء OpenGL 1.0 في عام 1992.

من فوائد استخدام لغة GLSL ما يلي:

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

الإصدارات

تطورت إصدارات GLSL بالتوازي مع إصدارات محددة من واجهة برمجة تطبيقات OpenGL. ولا تتطابق أرقام الإصدارات الرئيسية والثانوية لـ GLSL وOpenGL إلا مع إصدارات OpenGL 3.3 وما فوق. ويوضح الجدول التالي العلاقة بين هذه الإصدارات لـ GLSL وOpenGL:

إصدار GLSLإصدار OpenGLتاريخمعالج التظليل المسبق
1.10.59 [ 2 ]2.030 أبريل 2004الإصدار 110
1.20.8 [ 3 ]2.17 سبتمبر 2006الإصدار 120
1.30.10 [ 4 ]3.022 نوفمبر 2009الإصدار 130
1.40.08 [ 5 ]3.122 نوفمبر 2009الإصدار 140
1.50.11 [ 6 ]3.24 ديسمبر 2009النسخة 150
3.30.6 [ 7 ]3.311 مارس 2010الإصدار 330
4.00.9 [ 8 ]4.024 يوليو 2010الإصدار 400
4.10.6 [ 9 ]4.124 يوليو 2010الإصدار 410
4.20.11 [ 10 ]4.212 ديسمبر 2011الإصدار 420
4.30.8 [ 11 ]4.37 فبراير 2013الإصدار 430
4.40.9 [ 12 ]4.416 يونيو 2014الإصدار 440
4.50.7 [ 13 ]4.59 مايو 2017الإصدار 450
4.60.8 [ 14 ]4.614 أغسطس 2023الإصدار 460

يستخدم OpenGL ES و WebGL لغة تظليل OpenGL ES (المختصرة: GLSL ES أو ESSL ).

إصدار GLSL ESإصدار OpenGL ESإصدار WebGLاستنادًا إلى إصدار GLSLتاريخمعالج التظليل المسبق
1.00.17 [ 15 ]2.01.01.2012 مايو 2009الإصدار 100
3.00.6 [ 16 ]3.02.03.3029 يناير 2016الإصدار 300
3.10.5 [ 17 ]3.1GLSL ES 3.0029 يناير 2016الإصدار 310 es
3.20.8 [ 18 ]3.2GLSL ES 3.1014 أغسطس 2023الإصدار 320

اللغتان مرتبطتان لكنهما غير متوافقتين بشكل مباشر. يمكن تحويلهما من خلال SPIRV-Cross . [ 19 ]

لغة

المشغلون

تحتوي لغة GLSL على نفس المعاملات الموجودة في لغتي C و C++ ، باستثناء المؤشرات . تمت إضافة معاملات البت في الإصدار 1.30.

الوظائف وهياكل التحكم

على غرار لغة البرمجة C ، تدعم GLSL الحلقات والتفرع، على سبيل المثال: if-else، for، switch، إلخ. يُحظر الاستدعاء الذاتي ويتم التحقق منه أثناء عملية الترجمة.

يدعم GLSL الدوال المُعرَّفة من قِبل المستخدم، كما يوفر دوالًا مُدمجة. قد يُحسِّن مُصنِّع بطاقة الرسومات الدوال المُدمجة على مستوى العتاد. تُشابه العديد من هذه الدوال تلك الموجودة في مكتبة الرياضيات بلغة البرمجة C، بينما يُخصَّص بعضها الآخر لبرمجة الرسومات. يُمكن لمعظم الدوال والمعاملات المُدمجة العمل على كلٍّ من القيم العددية والمتجهات (حتى 4 عناصر)، لأحد المُعاملين أو كليهما. من الدوال المُدمجة الشائعة الاستخدام في أغراض الرسومات: mixو ، smoothstepو ، و normalize، و ، و ، و ، و ، و ، و ، و ، و ، و ، و ، و ، و inversesqrt، و ، clampو ، و length، و ، و distance، و ، و dot، و ، و ، crossو ، و reflect، و . كما تتوفر دوال أخرى مثل ، و ، و ، إلخ، ولكنها جميعًا تعمل على الكميات المتجهة، أي ، و ، و . يدعم GLSL تحميل الدوال الزائد (للدوال والمعاملات المُدمجة، والدوال المُعرَّفة من قِبل المستخدم)، لذا قد توجد تعريفات دوال متعددة بنفس الاسم، ولكن بعدد أو أنواع مُعاملات مُختلفة. يُمكن أن يكون لكل منها نوع إرجاع مُستقل خاص بها.refractminmaxabssinpowpow(vec3(1.5,2.0,2.5))abs(vec3(0.1,-0.2,0.3)))

المعالج المسبق

تُعرّف لغة GLSL مجموعة فرعية من معالج C المسبق (CPP)، بالإضافة إلى توجيهات خاصة بها لتحديد الإصدارات وامتدادات OpenGL. الأجزاء التي تم حذفها من CPP هي تلك المتعلقة بأسماء الملفات #includeمثل __FILE__. [ 20 ]

تُتيح الإضافة [ 21 ] (المُطبقة، على سبيل المثال، في برامج تشغيل Nvidia GL_ARB_shading_language_include[ 22 ] على نظامي التشغيل Windows وLinux، وجميع برامج تشغيل Mesa 20.0.0 [ 23 ] على أنظمة Linux وFreeBSD وAndroid) إمكانية استخدامها في شفرة المصدر، مما يُسهّل مشاركة الشفرة والتعريفات بين العديد من المُظللات دون الحاجة إلى معالجة يدوية مُسبقة إضافية. توجد إضافات مُشابهة لاستخدام GLSL مع Vulkan، وهي مدعومة في مُترجم SPIR-V المرجعي ( المعروف أيضًا باسم glslangValidator). [ 24 ] [ 25 ] [ 26 ]#includeGL_GOOGLE_include_directiveGL_GOOGLE_cpp_style_line_directiveglslang

التجميع والتنفيذ

لا تُعدّ مُظلّلات GLSL تطبيقات مستقلة؛ فهي تتطلب تطبيقًا يستخدم واجهة برمجة تطبيقات OpenGL، المتوفرة على العديد من المنصات المختلفة (مثل Linux و macOS و Windows ). وتتوفر روابط لغوية للغات C و C++ و C# و JavaScript و Delphi و Java وغيرها الكثير.

تُعدّ مُظلّلات GLSL ببساطة مجموعة من السلاسل النصية التي تُمرّر إلى برنامج تشغيل مُصنّع الأجهزة لتجميعها من داخل التطبيق باستخدام نقاط دخول واجهة برمجة تطبيقات OpenGL. يُمكن إنشاء المُظلّلات ديناميكيًا من داخل التطبيق، أو قراءتها كملفات نصية، ولكن يجب إرسالها إلى برنامج التشغيل على شكل سلسلة نصية.

تُحدد مجموعة واجهات برمجة التطبيقات (APIs) المستخدمة في تجميع وربط وتمرير المعاملات لبرامج GLSL في ثلاثة امتدادات لـ OpenGL، وأصبحت جزءًا من OpenGL الأساسية بدءًا من الإصدار 2.0. وتم توسيع واجهة برمجة التطبيقات لتشمل مُظللات الهندسة في OpenGL 3.2، ومُظللات التجزئة في OpenGL 4.0، ومُظللات الحساب في OpenGL 4.3. وتوجد واجهات برمجة تطبيقات OpenGL هذه في الامتدادات التالية:

  • مُظلل رؤوس ARB
  • تظليل أجزاء ARB
  • كائنات تظليل ARB
  • مُظلل هندسة ARB 4
  • مُظلل التجزئة ARB
  • برنامج تظليل حسابي ARB

يمكن استخدام تظليلات GLSL مع Vulkan ، وهي طريقة شائعة لاستخدام التظليلات في Vulkan. يتم تجميع تظليلات GLSL مسبقًا قبل الاستخدام، أو أثناء التشغيل، إلى تنسيق بايت كود ثنائي يُسمى SPIR-V ، وعادةً ما يتم ذلك باستخدام مُجمِّع غير متصل بالإنترنت.

انظر أيضاً

لغات التظليل الأخرى

مراجع

الاقتباسات
  1. "لغة التظليل OpenGL®، الإصدار 4.60.8" .
  2. "مواصفات لغة GLSL، الإصدار 1.10.59" (PDF) .
  3. "مواصفات لغة GLSL، الإصدار 1.20.8" (PDF) .
  4. "مواصفات لغة GLSL، الإصدار 1.30.10" (PDF) .
  5. "مواصفات لغة GLSL، الإصدار 1.40.08" (PDF) .
  6. "مواصفات لغة GLSL، الإصدار 1.50.11" (PDF) .
  7. "مواصفات لغة GLSL، الإصدار 3.30.6" (PDF) .
  8. "مواصفات لغة GLSL، الإصدار 4.00.9" (PDF) .
  9. "مواصفات لغة GLSL، الإصدار 4.10.6" (PDF) .
  10. "مواصفات لغة GLSL، الإصدار 4.20.11" (PDF) .
  11. "مواصفات لغة GLSL، الإصدار 4.30.8" (PDF) .
  12. "مواصفات لغة GLSL، الإصدار 4.40.9" (PDF) .
  13. "مواصفات لغة GLSL، الإصدار 4.50.7" (PDF) .
  14. "مواصفات لغة GLSL، الإصدار 4.60.8" (PDF) .
  15. "مواصفات لغة GLSL ES، الإصدار 1.00، المراجعة 17" (PDF) .
  16. "مواصفات لغة GLSL ES، الإصدار 3.00، المراجعة 6" (PDF) .
  17. "لغة التظليل OpenGL ES®، الإصدار 3.10، المراجعة 5" (PDF) .
  18. "لغة التظليل OpenGL ES®، الإصدار 3.20.8" (PDF) .
  19. مجموعة كرونوس/SPIRV-Cross ، مجموعة كرونوس، 6 سبتمبر 2019 ، تاريخ الاطلاع 8 سبتمبر 2019
  20. "معالج التظليل المسبق". دليل برمجة OpenGL: الدليل الرسمي لتعلم OpenGL، الإصدار 4.3، الطبعة الثامنة .
  21. "ARB_shading_language_include" . Khronos.org . تم الاطلاع عليه بتاريخ 31-05-2020 .
  22. "برنامج تشغيل NVIDIA 265.90 WHQL Quadro" . منتديات LaptopVideo2Go . مؤرشف من الأصل بتاريخ 8 مارس 2021.
  23. "ملاحظات إصدار Mesa 20.0.0 / 19 فبراير 2020" . www.mesa3d.org . مؤرشف من الأصل بتاريخ 12 مايو 2020. تم الاطلاع عليه بتاريخ 31 مايو 2020 .
  24. "دعم توجيه #include بواسطة antiagainst · طلب سحب رقم 46 · KhronosGroup/glslang" . GitHub . تم الاسترجاع في 31 مايو 2020 .
  25. "معالجة أرقام الأسطر مسبقًا بواسطة antiagainst · طلب سحب رقم 38 · KhronosGroup/glslang" . GitHub .
  26. "توسيع صيغة #line و __FILE__ لدعم سلاسل أسماء الملفات بواسطة antiagainst · طلب سحب رقم 43 · KhronosGroup/glslang" . GitHub .
  27. "مواصفات لغة تظليل المعادن الإصدار 3.2" .

للمزيد من القراءة

الكتب
  • روست، راندي ج. (30 يوليو 2009). لغة تظليل OpenGL (  الطبعة الثالثة). أديسون-ويسلي. ISBN 978-0-321-63763-5.
  • كيسينيتش، جون؛ بالدوين، ديفيد؛ روست، راندي. لغة تظليل OpenGL . الإصدار 1.10.59. شركة 3Dlabs المحدودة.
  • بيلي، مايك؛ كانينغهام، ستيف (22 أبريل 2009). تظليل الرسومات: النظرية والتطبيق (الطبعة الثانية  ). مطبعة سي آر سي. رقم ISBN 978-1-56881-434-6.