ओपनजीएल शेडिंग भाषा
ओपनजीएल शेडिंग लैंग्वेज (जीएलएसएल) हाई लेवल प्रोग्रामिंग लैंग्वेज है। सी (प्रोग्रामिंग लैंग्वेज) पर आधारित सिंटैक्स के साथ हाई लेवल शेडिंग लैंग्वेज, इसे ओपनजीएल एआरबी (ओपनजीएल आर्किटेक्चर रिव्यू बोर्ड) द्वारा डेवलपर्स को एआरबी असेंबली लैंग्वेज या हार्डवेयर-विशिष्ट लैंग्वेज का उपयोग किए बिना ग्राफ़िक्स पाइपलाइन का अधिक प्रत्यक्ष कंट्रोल देने के लिए बनाया गया था।
पृष्ठभूमि
ग्राफिक्स कार्ड में प्रगति के साथ, शीर्ष (कंप्यूटर ग्राफिक्स) और खंड (कंप्यूटर ग्राफिक्स) लेवल पर रेंडरिंग पाइपलाइन में स्मूथनेस को बढ़ाने के लिए नई सुविधाएँ जोड़ी गई हैं। इस लेवल पर प्रोग्रामेबिलिटी फ्रैगमेंट और वर्टेक्स शेडर्स के उपयोग से प्राप्त की जाती है।
मूल रूप से, यह कार्यक्षमता एआरबी असेंबली लैंग्वेज में शेडर्स लिखकर प्राप्त किया गया था - कठिन और सहज कार्य। ओपनजीएल एआरबी ने विवृत मानकों के लाभ को बनाए रखते हुए ग्राफिक्स प्रोसेसिंग यूनिट की प्रोग्रामिंग के लिए अधिक सरल विधि प्रदान करने के लिए ओपनजीएल शेडिंग लैंग्वेज का निर्माण किया, जिसने ओपनजीएल को उसके सम्पूर्ण इतिहास में संचालित किया है।
मूल रूप से ओपनजीएल 1.4 के विस्तार के रूप में प्रस्तुत किया गया, जीएलएसएल को औपचारिक रूप से 2004 में ओपनजीएल एआरबी द्वारा ओपनजीएल 2.0 कोर में सम्मिलित किया गया था। 1992 में ओपनजीएल 1.0 के निर्माण के पश्चात से यह ओपनजीएल का प्रथम बड़ा संशोधन था।
जीएलएसएल का उपयोग करने के कुछ लाभ हैं:
- लिनक्स, मैक ओएस और माइक्रोसॉफ्ट विंडोज़ सहित कई ऑपरेटिंग सिस्टम पर क्रॉस-प्लेटफॉर्म अनुकूलता होती है।
- शेडर्स लिखने की क्षमता जिसका उपयोग किसी भी हार्डवेयर विक्रेता के ग्राफिक्स कार्ड पर किया जा सकता है, जो ओपनजीएल शेडिंग लैंग्वेज का समर्थन करता है।
- प्रत्येक हार्डवेयर विक्रेता अपने ड्राइवर में जीएलएसएल कंपाइलर सम्मिलित करता है, इस प्रकार प्रत्येक विक्रेता को अपने विशेष ग्राफिक्स कार्ड के आर्किटेक्चर के लिए अनुकूलित कोड बनाने की अनुमति मिलती है।
संस्करण
जीएलएसएल संस्करण ओपनजीएल एपीआई के विशिष्ट संस्करणों के साथ विकसित हुए हैं। यह केवल ओपनजीएल संस्करण 3.3 और उससे ऊपर के साथ है कि जीएलएसएल और ओपनजीएल प्रमुख और लघु संस्करण संख्याएं मैच होती हैं। जीएलएसएल और ओपनजीएल के ये संस्करण निम्नलिखित टेबल से संबंधित हैं:
जीएलएसएल संस्करण | ओपनजीएल संस्करण | डेट | शेडर प्रीप्रोसेसर |
---|---|---|---|
1.10.59[1] | 2.0 | 30 अप्रैल 2004 | #संस्करण 110 |
1.20.8[2] | 2.1 | 07 सितम्बर 2006 | #संस्करण 120 |
1.30.10[3] | 3.0 | 22 नवंबर 2009 | #संस्करण 130 |
1.40.08[4] | 3.1 | 22 नवंबर 2009 | #संस्करण 140 |
1.50.11[5] | 3.2 | 04 दिसंबर 2009 | #संस्करण 150 |
3.30.6[6] | 3.3 | 11 मार्च 2010 | #संस्करण 330 |
4.00.9[7] | 4.0 | 24 जुलाई 2010 | #संस्करण 400 |
4.10.6[8] | 4.1 | 24 जुलाई 2010 | #संस्करण 410 |
4.20.11[9] | 4.2 | 12 दिसंबर 2011 | #संस्करण 420 |
4.30.8[10] | 4.3 | 7 फरवरी 2013 | #संस्करण 430 |
4.40.9[11] | 4.4 | 16 जून 2014 | #संस्करण 440 |
4.50.7[12] | 4.5 | 09 मई 2017 | #संस्करण 450 |
4.60.5[13] | 4.6 | 14 जून 2018 | #संस्करण 460 |
ओपनजीएल एन और वेबजीएल ओपनजीएल ईएस शेडिंग लैंग्वेज (संक्षिप्त: जीएलएसएल ईएस या ईएसएसएल) का उपयोग करते हैं।
जीएलएसएल ईएस संस्करण | ओपनजीएल ईएस संस्करण | वेबजीएल संस्करण | जीएलएसएल संस्करण पर आधारित | डेट | शेडर प्रीप्रोसेसर |
---|---|---|---|---|---|
1.00.17[14] | 2.0 | 1.0 | 1.20 | 12 मई 2009 | #संस्करण 100 ई.एस |
3.00.6[15] | 3.0 | 2.0 | 3.30 | 29 जनवरी 2016 | #संस्करण 300 ई.एस |
3.10.5[16] | 3.1 | GLSL ES 3.00 | 29 जनवरी 2016 | #संस्करण 310 ई.एस | |
3.20.6[17] | 3.2 | GLSL ES 3.10 | 10 जुलाई 2019 | #संस्करण 320 ई.एस |
दोनों लैंग्वेज संबंधित हैं, किन्तु सीधे संगत नहीं हैं। इन्हें एसपीआईआरवी-क्रॉस के द्वारा आपस में परिवर्तित किया जा सकता है।[18]
लैंग्वेज
ऑपरेटर
जीएलएसएल में पॉइंटर (कंप्यूटर प्रोग्रामिंग) के एक्सेप्शन के साथ, 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 में कंप्यूटर शेडर्स के साथ विस्तारित किया गया था। ये ओपनजीएल एपीआई एक्सटेंशन में पाए जाते हैं:
- एआरबी वर्टेक्स शेडर
- एआरबी फ्रैगमेंट शेडर
- एआरबी शेडर ऑब्जेक्ट
- एआरबी ज्योमेट्री शेडर 4
- एआरबी टेस्सेलेशन शेडर
- एआरबी कंप्यूट शेडर
जीएलएसएल शेडर्स का उपयोग वल्कन (एपीआई) के साथ भी किया जा सकता है, और वल्कन में शेडर्स का उपयोग करने का यह सामान्य उपाए है। जीएलएसएल शेडर्स को उपयोग से पूर्व या रनटाइम पर एसपीआईआर-वी नामक बाइनरी बाइटकोड प्रारूप में पूर्व-कंपाइलड किया जाता है, सामान्यतः ऑफ़लाइन कंपाइलर का उपयोग किया जाता है।
यह भी देखें
- स्टैंडर्ड पोर्टेबल इंटरमीडिएट रिप्रेजेंटेशन, क्रोनोस ग्रुप द्वारा इंटरमीडिएट शेडर लैंग्वेज
- 3डी कंप्यूटर ग्राफिक्स
- ख्रोनोस ग्रुप
- वेबजीएल, वेब ब्राउज़र के लिए ओपनजीएल-ईएस, जो शेडर्स के लिए जीएलएसएल का उपयोग करती है।
- शेडरटॉय
- एलडब्ल्यूजेजीएल, लाइब्रेरी जिसमें ओपनजीएल के लिए जावा बाइंडिंग सम्मिलित है।
अन्य शेडिंग लैंग्वेज
- एआरबी असेंबली लैंग्वेज, लो लेवल शेडिंगलैंग्वेज
- सीजी (प्रोग्रामिंग लैंग्वेज), प्रोग्रामिंग शीर्ष और पिक्सेल शेडर्स के लिए हाई लेवल शेडिंग लैंग्वेज
- हाई लेवल शेडर लैंग्वेज, डायरेक्ट 3डी के साथ उपयोग के लिए हाई लेवल शेडिंग लैंग्वेज
- टीजीएसआई, गैलियम 3डी द्वारा प्रारम्भ की गई लो लेवल इंटरमीडिट लैंग्वेज
- एएमडीआईएल, एएमडी में इंटेरली रूप से उपयोग की जाने वाली लो लेवल इंटरमीडिट लैंग्वेज
- रेंडरमैन शेडिंग लैंग्वेज।
रेफ़्रेन्स
- Citations
- ↑ "GLSL Language Specification, Version 1.10.59" (PDF).
- ↑ "GLSL Language Specification, Version 1.20.8" (PDF).
- ↑ "GLSL Language Specification, Version 1.30.10" (PDF).
- ↑ "GLSL Language Specification, Version 1.40.08" (PDF).
- ↑ "GLSL Language Specification, Version 1.50.11" (PDF).
- ↑ "GLSL Language Specification, Version 3.30.6" (PDF).
- ↑ "GLSL Language Specification, Version 4.00.9" (PDF).
- ↑ "GLSL Language Specification, Version 4.10.6" (PDF).
- ↑ "GLSL Language Specification, Version 4.20.11" (PDF).
- ↑ "GLSL Language Specification, Version 4.30.8" (PDF).
- ↑ "GLSL Language Specification, Version 4.40.9" (PDF).
- ↑ "GLSL Language Specification, Version 4.50.7" (PDF).
- ↑ "GLSL Language Specification, Version 4.60.5" (PDF).
- ↑ "GLSL ES Language Specification, Version 1.00, revision 17" (PDF).
- ↑ "GLSL ES Language Specification, Version 3.00, revision 6" (PDF).
- ↑ "The OpenGL ES® Shading Language, version 3.10, revision 5" (PDF).
{{cite web}}
: CS1 maint: url-status (link) - ↑ "The OpenGL ES® Shading Language, Version 3.20.6" (PDF).
{{cite web}}
: CS1 maint: url-status (link) - ↑ KhronosGroup/SPIRV-Cross, The Khronos Group, 2019-09-06, retrieved 2019-09-08
- ↑ "Shader Preprocessor". OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 4.3, Eighth Edition (in English).
- ↑ "ARB_shading_language_include". Khronos.org. Retrieved 2020-05-31.
- ↑ "NVIDIA driver 265.90 WHQL Quadro". LaptopVideo2Go Forums.
- ↑ "Mesa 20.0.0 Release Notes / 2020-02-19". www.mesa3d.org. Retrieved 2020-05-31.
- ↑ "#include directive support by antiagainst · Pull Request #46 · KhronosGroup/glslang". GitHub (in English). Retrieved 2020-05-31.
- ↑ "Preprocessing line number handling by antiagainst · Pull Request #38 · KhronosGroup/glslang". GitHub (in English).
- ↑ "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.