ओपनजीएल शेडिंग भाषा: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 13: Line 13:


जीएलएसएल का उपयोग करने के कुछ लाभ हैं:
जीएलएसएल का उपयोग करने के कुछ लाभ हैं:
* [[Linux]], [[macOS]] और [[Microsoft Windows]] सहित कई ऑपरेटिंग सिस्टम पर [[क्रॉस-प्लेटफॉर्म]] अनुकूलता।
* [[Linux|लिनक्स]], [[macOS|मैक ओएस]] और [[Microsoft Windows|माइक्रोसॉफ्ट विंडोज़]] सहित कई ऑपरेटिंग सिस्टम पर [[क्रॉस-प्लेटफॉर्म]] अनुकूलता।
* शेडर्स लिखने की क्षमता जिसका उपयोग किसी भी हार्डवेयर विक्रेता के ग्राफिक्स कार्ड पर किया जा सकता है जो ओपनजीएल शेडिंग लैंग्वेज का समर्थन करता है।
* शेडर्स लिखने की क्षमता जिसका उपयोग किसी भी हार्डवेयर विक्रेता के ग्राफिक्स कार्ड पर किया जा सकता है, जो ओपनजीएल शेडिंग लैंग्वेज का समर्थन करता है।
* प्रत्येक हार्डवेयर विक्रेता अपने ड्राइवर में GLSL कंपाइलर सम्मिलित करता है, इस प्रकार प्रत्येक विक्रेता को अपने विशेष ग्राफिक्स कार्ड के आर्किटेक्चर के लिए अनुकूलित कोड बनाने की अनुमति मिलती है।
* प्रत्येक हार्डवेयर विक्रेता अपने ड्राइवर में जीएलएसएल कंपाइलर सम्मिलित करता है, इस प्रकार प्रत्येक विक्रेता को अपने विशेष ग्राफिक्स कार्ड के आर्किटेक्चर के लिए अनुकूलित कोड बनाने की अनुमति मिलती है।


==संस्करण==
==संस्करण==
जीएलएसएल संस्करण ओपनजीएल एपीआई के विशिष्ट संस्करणों के साथ विकसित हुए हैं। यह केवल ओपनजीएल संस्करण 3.3 और उससे ऊपर के साथ है कि जीएलएसएल और ओपनजीएल प्रमुख और लघु संस्करण संख्याएं मेल खाती हैं। जीएलएसएल और ओपनजीएल के ये संस्करण निम्नलिखित तालिका में संबंधित हैं:
जीएलएसएल संस्करण ओपनजीएल एपीआई के विशिष्ट संस्करणों के साथ विकसित हुए हैं। यह केवल ओपनजीएल संस्करण 3.3 और उससे ऊपर के साथ है कि जीएलएसएल और ओपनजीएल प्रमुख और लघु संस्करण संख्याएं मेल खाती हैं। जीएलएसएल और ओपनजीएल के ये संस्करण निम्नलिखित सारणी से संबंधित हैं:


{| class="wikitable"
{| class="wikitable"

Revision as of 23:32, 12 August 2023

वीडियो गेम वास्तविक समय में ओपनजीएल पर ग्राफ़िक्स प्रोसेसिंग युनिट को रेंडरिंग गणनाओं को आउटसोर्स करते हैं। शेडर्स को ओपनजीएल शेडिंग लैंग्वेज में लिखा और संकलित किया जाता है। संकलित प्रोग्राम GPU पर निष्पादित होते हैं।

ओपनजीएल शेडिंग लैंग्वेज (जीएलएसएल) उच्च स्तरीय प्रोग्रामिंग लैंग्वेज है | सी (प्रोग्रामिंग भाषा) पर आधारित सिंटैक्स के साथ उच्च स्तरीय शेडिंग भाषा, इसे ओपनजीएल एआरबी (ओपनजीएल आर्किटेक्चर रिव्यू बोर्ड) द्वारा डेवलपर्स को एआरबी असेंबली लैंग्वेज या हार्डवेयर-विशिष्ट भाषाओं का उपयोग किए बिना ग्राफ़िक्स पाइपलाइन का अधिक प्रत्यक्ष नियंत्रण देने के लिए बनाया गया था।

पृष्ठभूमि

ग्राफिक्स कार्ड में प्रगति के साथ, शीर्ष (कंप्यूटर ग्राफिक्स) और खंड (कंप्यूटर ग्राफिक्स) स्तर पर रेंडरिंग पाइपलाइन में स्मूथनेस को बढ़ाने के लिए नई सुविधाएँ जोड़ी गई हैं। इस स्तर पर प्रोग्रामेबिलिटी फ्रैगमेंट और वर्टेक्स शेडर्स के उपयोग से प्राप्त की जाती है।

मूल रूप से, यह कार्यक्षमता एआरबी असेंबली लैंग्वेज में शेडर्स लिखकर प्राप्त की गई थी - कठिन और सहज कार्य। ओपनजीएल एआरबी ने विवृत मानकों के लाभ को बनाए रखते हुए ग्राफिक्स प्रोसेसिंग यूनिट की प्रोग्रामिंग के लिए अधिक सरल विधि प्रदान करने के लिए ओपनजीएल शेडिंग लैंग्वेज का निर्माण किया, जिसने ओपनजीएल को उसके सम्पूर्ण इतिहास में संचालित किया है।

मूल रूप से ओपनजीएल 1.4 के विस्तार के रूप में प्रस्तुत किया गया, जीएलएसएल को औपचारिक रूप से 2004 में ओपनजीएल एआरबी द्वारा ओपनजीएल 2.0 कोर में सम्मिलित किया गया था। 1992 में ओपनजीएल 1.0 के निर्माण के पश्चात से यह ओपनजीएल का प्रथम बड़ा संशोधन था।

जीएलएसएल का उपयोग करने के कुछ लाभ हैं:

  • लिनक्स, मैक ओएस और माइक्रोसॉफ्ट विंडोज़ सहित कई ऑपरेटिंग सिस्टम पर क्रॉस-प्लेटफॉर्म अनुकूलता।
  • शेडर्स लिखने की क्षमता जिसका उपयोग किसी भी हार्डवेयर विक्रेता के ग्राफिक्स कार्ड पर किया जा सकता है, जो ओपनजीएल शेडिंग लैंग्वेज का समर्थन करता है।
  • प्रत्येक हार्डवेयर विक्रेता अपने ड्राइवर में जीएलएसएल कंपाइलर सम्मिलित करता है, इस प्रकार प्रत्येक विक्रेता को अपने विशेष ग्राफिक्स कार्ड के आर्किटेक्चर के लिए अनुकूलित कोड बनाने की अनुमति मिलती है।

संस्करण

जीएलएसएल संस्करण ओपनजीएल एपीआई के विशिष्ट संस्करणों के साथ विकसित हुए हैं। यह केवल ओपनजीएल संस्करण 3.3 और उससे ऊपर के साथ है कि जीएलएसएल और ओपनजीएल प्रमुख और लघु संस्करण संख्याएं मेल खाती हैं। जीएलएसएल और ओपनजीएल के ये संस्करण निम्नलिखित सारणी से संबंधित हैं:

GLSL Version OpenGL Version Date Shader Preprocessor
1.10.59[1] 2.0 30 April 2004 #version 110
1.20.8[2] 2.1 07 September 2006 #version 120
1.30.10[3] 3.0 22 November 2009 #version 130
1.40.08[4] 3.1 22 November 2009 #version 140
1.50.11[5] 3.2 04 December 2009 #version 150
3.30.6[6] 3.3 11 March 2010 #version 330
4.00.9[7] 4.0 24 July 2010 #version 400
4.10.6[8] 4.1 24 July 2010 #version 410
4.20.11[9] 4.2 12 December 2011 #version 420
4.30.8[10] 4.3 7 February 2013 #version 430
4.40.9[11] 4.4 16 June 2014 #version 440
4.50.7[12] 4.5 09 May 2017 #version 450
4.60.5[13] 4.6 14 June 2018 #version 460

ओपनजीएल एन और वेबजीएल ओपनजीएल ईएस शेडिंग लैंग्वेज (संक्षिप्त: जीएलएसएल ईएस या ईएसएसएल) का उपयोग करते हैं।

GLSL ES version OpenGL ES version WebGL version Based on GLSL version Date Shader Preprocessor
1.00.17[14] 2.0 1.0 1.20 12 May 2009 #version 100
3.00.6[15] 3.0 2.0 3.30 29 January 2016 #version 300 es
3.10.5[16] 3.1 GLSL ES 3.00 29 January 2016 #version 310 es
3.20.6[17] 3.2 GLSL ES 3.10 10 July 2019 #version 320 es

दोनों भाषाएँ संबंधित हैं लेकिन सीधे संगत नहीं हैं। इन्हें मानक पोर्टेबल इंटरमीडिएट प्रतिनिधित्व |एसपीआईआरवी-क्रॉस के जरिए आपस में बदला जा सकता है।[18]

भाषा

संचालक

GLSL में पॉइंटर (कंप्यूटर प्रोग्रामिंग) के अपवाद के साथ, C और C++ में ऑपरेटरों के समान ही ऑपरेटर सम्मिलित हैं। बिटवाइज़ ऑपरेटर्स को संस्करण 1.30 में जोड़ा गया था।

कार्य और नियंत्रण संरचनाएं

सी (प्रोग्रामिंग भाषा) के समान, जीएलएसएल लूप और ब्रांचिंग का समर्थन करता है, उदाहरण के लिए: यदि-अन्यथा, के लिए, स्विच इत्यादि। संकलन के दौरान रिकर्सन निषिद्ध है और इसकी जांच की जाती है।

उपयोगकर्ता-परिभाषित फ़ंक्शन समर्थित हैं और अंतर्निहित फ़ंक्शन प्रदान किए गए हैं। ग्राफिक्स कार्ड निर्माता हार्डवेयर स्तर पर अंतर्निहित कार्यों को अनुकूलित कर सकता है। इनमें से कई फ़ंक्शन सी प्रोग्रामिंग लैंग्वेजकी गणित लाइब्रेरी के समान हैं जबकि अन्य ग्राफिक्स प्रोग्रामिंग के लिए विशिष्ट हैं। अधिकांश अंतर्निहित फ़ंक्शन और ऑपरेटर, या दोनों ऑपरेंड के लिए, स्केलर और वैक्टर (4 तत्वों तक) दोनों पर काम कर सकते हैं। सामान्य अंतर्निर्मित फ़ंक्शन जो प्रदान किए जाते हैं और आमतौर पर ग्राफ़िक्स उद्देश्यों के लिए उपयोग किए जाते हैं वे हैं: mix, smoothstep, normalize, inversesqrt, clamp, length, distance, dot, cross, reflect, refract और वेक्टर min और max. जैसे अन्य कार्य abs, sin, pow, आदि प्रदान किए गए हैं, लेकिन वे सभी वेक्टर मात्राओं पर भी काम कर सकते हैं, यानी। pow(vec3(1.5, 2.0, 2.5), abs(vec3(0.1, -0.2, 0.3))). जीएलएसएल फ़ंक्शन ओवरलोडिंग (अंतर्निहित फ़ंक्शंस और ऑपरेटरों और उपयोगकर्ता-परिभाषित फ़ंक्शंस दोनों के लिए) का समर्थन करता है, इसलिए ही नाम के साथ कई फ़ंक्शन परिभाषाएं हो सकती हैं, जिनमें अलग-अलग संख्या में पैरामीटर या पैरामीटर प्रकार होते हैं। उनमें से प्रत्येक का अपना स्वतंत्र रिटर्न प्रकार हो सकता है।

प्रीप्रोसेसर

जीएलएसएल सी प्रीप्रोसेसर (सीपीपी) के सबसेट को परिभाषित करता है, जो संस्करणों और ओपनजीएल ्सटेंशन को निर्दिष्ट करने के लिए अपने स्वयं के विशेष निर्देशों के साथ संयुक्त है। सीपीपी से हटाए गए हिस्से फ़ाइल नामों से संबंधित हैं जैसे #include और __FILE__.[19]

{{code|GL_ARB_shading_language_include}विस्तार का[20] (उदाहरण के लिए एनवीडिया ड्राइवरों में लागू किया गया[21] विंडोज़ और लिनक्स और सभी मेसा 20.0.0 पर[22] लिनक्स, फ्रीबीएसडी और एंड्रॉइड पर ड्राइवर) उपयोग करने की क्षमता लागू करते हैं #include स्रोत कोड में, अतिरिक्त मैन्युअल प्री-प्रोसेसिंग के बिना कई शेडर्स के बीच कोड और परिभाषाओं को आसानी से साझा करने की अनुमति देता है। समान विस्तार GL_GOOGLE_include_directive और GL_GOOGLE_cpp_style_line_directive वल्कन के साथ जीएलएसएल का उपयोग करने के लिए मौजूद हैं, और संदर्भ एसपीआईआर-वी कंपाइलर में समर्थित हैं (glslang उर्फ ​​glslangValidator)।[23][24][25]

संकलन और निष्पादन

जीएलएसएल शेडर्स स्टैंड-अलोन अनुप्रयोग नहीं हैं; उन्हें ऐसे एप्लिकेशन की आवश्यकता होती है जो ओपनजीएल एपीआई का उपयोग करता है, जो कई अलग-अलग प्लेटफार्मों (जैसे, लिनक्स, मैकओएस, माइक्रोसॉफ्ट विंडोज) पर उपलब्ध है। सी (प्रोग्रामिंग भाषा), सी++, सी शार्प (प्रोग्रामिंग भाषा)|सी#, जावास्क्रिप्ट, डेल्फी (प्रोग्रामिंग भाषा), जावा (प्रोग्रामिंग भाषा), और कई अन्य के लिए लैंग्वेजबाइंडिंग हैं।

जीएलएसएल शेडर्स स्वयं स्ट्रिंग (कंप्यूटर विज्ञान) का सेट है जो ओपनजीएल एपीआई के प्रवेश बिंदुओं का उपयोग करके किसी एप्लिकेशन के भीतर से संकलन के लिए हार्डवेयर विक्रेता के ड्राइवर को पास किया जाता है। शेडर्स को किसी एप्लिकेशन के भीतर से तुरंत विक्षनरी बनाया जा सकता है, या टेक्स्ट फ़ाइलों के रूप में पढ़ा जा सकता है, लेकिन उन्हें स्ट्रिंग के रूप में ड्राइवर को भेजा जाना चाहिए।

जीएलएसएल कार्यक्रमों को संकलित करने, लिंक करने और पैरामीटर पास करने के लिए उपयोग किए जाने वाले एपीआई का सेट तीन ओपनजीएल ्सटेंशन में निर्दिष्ट है, और ओपनजीएल संस्करण 2.0 के रूप में कोर ओपनजीएल का हिस्सा बन गया है। एपीआई को ओपनजीएल 3.2 में ज्योमेट्री शेडर्स, ओपनजीएल 4.0 में टेस्सेलेशन शेडर्स और ओपनजीएल 4.3 में कर्नेल की गणना करें के साथ विस्तारित किया गया था। ये OpenGL API ्सटेंशन में पाए जाते हैं:

  • एआरबी शीर्ष शेडर
  • एआरबी फ्रैगमेंट शेडर
  • एआरबी शेडर ऑब्जेक्ट
  • एआरबी ज्योमेट्री शेडर 4
  • एआरबी टेस्सेलेशन शेडर
  • एआरबी कंप्यूट शेडर

जीएलएसएल शेडर्स का उपयोग वल्कन (एपीआई) के साथ भी किया जा सकता है, और वल्कन में शेडर्स का उपयोग करने का यह सामान्य तरीका है। जीएलएसएल शेडर्स को उपयोग से पहले या रनटाइम पर एसपीआईआर-वी नामक बाइनरी बाइटकोड प्रारूप में पूर्व-संकलित किया जाता है, आमतौर पर ऑफ़लाइन कंपाइलर का उपयोग करते हुए।

यह भी देखें

  • स्टैंडर्ड पोर्टेबल इंटरमीडिएट रिप्रेजेंटेशन, क्रोनोस समूह द्वारा इंटरमीडिएट शेडर भाषा
  • 3डी कंप्यूटर ग्राफिक्स
  • ख्रोनोस ग्रुप
  • वेबजीएल, वेब ब्राउज़र के लिए ओपनजीएल-ईएस बोली, जो शेडर्स के लिए जीएलएसएल का उपयोग करती है
  • शेडरटॉय
  • LWJGL, लाइब्रेरी जिसमें OpenGL के लिए जावा बाइंडिंग सम्मिलित है।

अन्य छायांकन भाषाएँ

संदर्भ

Citations
  1. "GLSL Language Specification, Version 1.10.59" (PDF).
  2. "GLSL Language Specification, Version 1.20.8" (PDF).
  3. "GLSL Language Specification, Version 1.30.10" (PDF).
  4. "GLSL Language Specification, Version 1.40.08" (PDF).
  5. "GLSL Language Specification, Version 1.50.11" (PDF).
  6. "GLSL Language Specification, Version 3.30.6" (PDF).
  7. "GLSL Language Specification, Version 4.00.9" (PDF).
  8. "GLSL Language Specification, Version 4.10.6" (PDF).
  9. "GLSL Language Specification, Version 4.20.11" (PDF).
  10. "GLSL Language Specification, Version 4.30.8" (PDF).
  11. "GLSL Language Specification, Version 4.40.9" (PDF).
  12. "GLSL Language Specification, Version 4.50.7" (PDF).
  13. "GLSL Language Specification, Version 4.60.5" (PDF).
  14. "GLSL ES Language Specification, Version 1.00, revision 17" (PDF).
  15. "GLSL ES Language Specification, Version 3.00, revision 6" (PDF).
  16. "The OpenGL ES® Shading Language, version 3.10, revision 5" (PDF).{{cite web}}: CS1 maint: url-status (link)
  17. "The OpenGL ES® Shading Language, Version 3.20.6" (PDF).{{cite web}}: CS1 maint: url-status (link)
  18. KhronosGroup/SPIRV-Cross, The Khronos Group, 2019-09-06, retrieved 2019-09-08
  19. "Shader Preprocessor". OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 4.3, Eighth Edition (in English).
  20. "ARB_shading_language_include". Khronos.org. Retrieved 2020-05-31.
  21. "NVIDIA driver 265.90 WHQL Quadro". LaptopVideo2Go Forums.
  22. "Mesa 20.0.0 Release Notes / 2020-02-19". www.mesa3d.org. Retrieved 2020-05-31.
  23. "#include directive support by antiagainst · Pull Request #46 · KhronosGroup/glslang". GitHub (in English). Retrieved 2020-05-31.
  24. "Preprocessing line number handling by antiagainst · Pull Request #38 · KhronosGroup/glslang". GitHub (in English).
  25. "Extend the syntax of #line and __FILE__ to support filename strings by antiagainst · Pull Request #43 · KhronosGroup/glslang". GitHub (in English).


अग्रिम पठन

Books
  • Rost, Randi J. (30 July 2009). OpenGL Shading Language (3rd ed.). Addison-Wesley. ISBN 978-0-321-63763-5.
  • Kessenich, John; Baldwin, David; Rost, Randi. The OpenGL Shading Language. Version 1.10.59. 3Dlabs, Inc. Ltd.
  • Bailey, Mike; Cunningham, Steve (22 April 2009). Graphics Shaders: Theory and Practice (2nd ed.). CRC Press. ISBN 978-1-56881-434-6.


बाहरी संबंध