لغة تظليل OpenGL

لغة تظليل 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.0 | 30 أبريل 2004 | الإصدار 110 |
| 1.20.8 [ 3 ] | 2.1 | 7 سبتمبر 2006 | الإصدار 120 |
| 1.30.10 [ 4 ] | 3.0 | 22 نوفمبر 2009 | الإصدار 130 |
| 1.40.08 [ 5 ] | 3.1 | 22 نوفمبر 2009 | الإصدار 140 |
| 1.50.11 [ 6 ] | 3.2 | 4 ديسمبر 2009 | النسخة 150 |
| 3.30.6 [ 7 ] | 3.3 | 11 مارس 2010 | الإصدار 330 |
| 4.00.9 [ 8 ] | 4.0 | 24 يوليو 2010 | الإصدار 400 |
| 4.10.6 [ 9 ] | 4.1 | 24 يوليو 2010 | الإصدار 410 |
| 4.20.11 [ 10 ] | 4.2 | 12 ديسمبر 2011 | الإصدار 420 |
| 4.30.8 [ 11 ] | 4.3 | 7 فبراير 2013 | الإصدار 430 |
| 4.40.9 [ 12 ] | 4.4 | 16 يونيو 2014 | الإصدار 440 |
| 4.50.7 [ 13 ] | 4.5 | 9 مايو 2017 | الإصدار 450 |
| 4.60.8 [ 14 ] | 4.6 | 14 أغسطس 2023 | الإصدار 460 |
يستخدم OpenGL ES و WebGL لغة تظليل OpenGL ES (المختصرة: GLSL ES أو ESSL ).
| إصدار GLSL ES | إصدار OpenGL ES | إصدار WebGL | استنادًا إلى إصدار GLSL | تاريخ | معالج التظليل المسبق |
|---|---|---|---|---|---|
| 1.00.17 [ 15 ] | 2.0 | 1.0 | 1.20 | 12 مايو 2009 | الإصدار 100 |
| 3.00.6 [ 16 ] | 3.0 | 2.0 | 3.30 | 29 يناير 2016 | الإصدار 300 |
| 3.10.5 [ 17 ] | 3.1 | GLSL ES 3.00 | 29 يناير 2016 | الإصدار 310 es | |
| 3.20.8 [ 18 ] | 3.2 | GLSL ES 3.10 | 14 أغسطس 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 ، وعادةً ما يتم ذلك باستخدام مُجمِّع غير متصل بالإنترنت.
انظر أيضاً
- تمثيل وسيط محمول قياسي ، لغة تظليل وسيطة من تطوير مجموعة كرونوس
- رسومات الحاسوب ثلاثية الأبعاد
- مجموعة كرونوس
- WebGL ، وهي لهجة من OpenGL-ES لمتصفحات الويب، والتي تستخدم GLSL للتظليل.
- شادرتوي
- LWJGL ، مكتبة تتضمن روابط جافا لـ OpenGL.
لغات التظليل الأخرى
- لغة التجميع ARB ، وهي لغة تظليل منخفضة المستوى
- Cg ، لغة تظليل عالية المستوى لبرمجة تظليل الرؤوس والبكسل
- HLSL ، لغة تظليل عالية المستوى للاستخدام مع Direct3D و SPIR-V
- TGSI ، وهي لغة وسيطة منخفضة المستوى قدمتها شركة Gallium3D
- AMDIL ، وهي لغة وسيطة منخفضة المستوى تُستخدم داخليًا في AMD
- لغة تظليل ريندرمان
- WGSL ، لغة تظليل ذات بنية تشبه لغة Rust لـ WebGPU، تعتمد في الأصل على SPIR-V
- لغة تظليل المعادن ، وهي لغة تظليل تستخدم مع واجهة برمجة تطبيقات الرسومات المعدنية الخاصة بمنصة Apple [ 27 ]
- لغة التظليل المفتوحة ، وهي لغة تظليل طورتها شركة سوني بيكتشرز إيماج وركس.
مراجع
- الاقتباسات
- ↑ "لغة التظليل OpenGL®، الإصدار 4.60.8" .
- ↑ "مواصفات لغة GLSL، الإصدار 1.10.59" (PDF) .
- ↑ "مواصفات لغة GLSL، الإصدار 1.20.8" (PDF) .
- ↑ "مواصفات لغة GLSL، الإصدار 1.30.10" (PDF) .
- ↑ "مواصفات لغة GLSL، الإصدار 1.40.08" (PDF) .
- ↑ "مواصفات لغة GLSL، الإصدار 1.50.11" (PDF) .
- ↑ "مواصفات لغة GLSL، الإصدار 3.30.6" (PDF) .
- ↑ "مواصفات لغة GLSL، الإصدار 4.00.9" (PDF) .
- ↑ "مواصفات لغة GLSL، الإصدار 4.10.6" (PDF) .
- ↑ "مواصفات لغة GLSL، الإصدار 4.20.11" (PDF) .
- ↑ "مواصفات لغة GLSL، الإصدار 4.30.8" (PDF) .
- ↑ "مواصفات لغة GLSL، الإصدار 4.40.9" (PDF) .
- ↑ "مواصفات لغة GLSL، الإصدار 4.50.7" (PDF) .
- ↑ "مواصفات لغة GLSL، الإصدار 4.60.8" (PDF) .
- ↑ "مواصفات لغة GLSL ES، الإصدار 1.00، المراجعة 17" (PDF) .
- ↑ "مواصفات لغة GLSL ES، الإصدار 3.00، المراجعة 6" (PDF) .
- ↑ "لغة التظليل OpenGL ES®، الإصدار 3.10، المراجعة 5" (PDF) .
- ↑ "لغة التظليل OpenGL ES®، الإصدار 3.20.8" (PDF) .
- ↑ مجموعة كرونوس/SPIRV-Cross ، مجموعة كرونوس، 6 سبتمبر 2019 ، تاريخ الاطلاع 8 سبتمبر 2019
- ↑ "معالج التظليل المسبق". دليل برمجة OpenGL: الدليل الرسمي لتعلم OpenGL، الإصدار 4.3، الطبعة الثامنة .
- ↑ "ARB_shading_language_include" . Khronos.org . تم الاطلاع عليه بتاريخ 31-05-2020 .
- ↑ "برنامج تشغيل NVIDIA 265.90 WHQL Quadro" . منتديات LaptopVideo2Go . مؤرشف من الأصل بتاريخ 8 مارس 2021.
- ↑ "ملاحظات إصدار Mesa 20.0.0 / 19 فبراير 2020" . www.mesa3d.org . مؤرشف من الأصل بتاريخ 12 مايو 2020. تم الاطلاع عليه بتاريخ 31 مايو 2020 .
- ↑ "دعم توجيه #include بواسطة antiagainst · طلب سحب رقم 46 · KhronosGroup/glslang" . GitHub . تم الاسترجاع في 31 مايو 2020 .
- ↑ "معالجة أرقام الأسطر مسبقًا بواسطة antiagainst · طلب سحب رقم 38 · KhronosGroup/glslang" . GitHub .
- ↑ "توسيع صيغة #line و __FILE__ لدعم سلاسل أسماء الملفات بواسطة antiagainst · طلب سحب رقم 43 · KhronosGroup/glslang" . GitHub .
- ↑ "مواصفات لغة تظليل المعادن الإصدار 3.2" .
للمزيد من القراءة
- الكتب
- روست، راندي ج. (30 يوليو 2009). لغة تظليل OpenGL ( الطبعة الثالثة). أديسون-ويسلي. ISBN 978-0-321-63763-5.
- كيسينيتش، جون؛ بالدوين، ديفيد؛ روست، راندي. لغة تظليل OpenGL . الإصدار 1.10.59. شركة 3Dlabs المحدودة.
- بيلي، مايك؛ كانينغهام، ستيف (22 أبريل 2009). تظليل الرسومات: النظرية والتطبيق (الطبعة الثانية ). مطبعة سي آر سي. رقم ISBN 978-1-56881-434-6.
روابط خارجية
- عائلة لغات البرمجة C
- OpenGL
- لغات التظليل
- الواقع الافتراضي
