ओपनजीएल शेडिंग भाषा: Difference between revisions
No edit summary |
No edit summary |
||
Line 3: | Line 3: | ||
}} | }} | ||
[[File:Linux kernel and OpenGL video games.svg|thumb|[[वीडियो गेम]] रियल टाइम में [[ओपन|ओपनजीएल]] पर [[ग्राफ़िक्स प्रोसेसिंग युनिट]] को रेंडरिंग कैलकुलेशन का आउटसोर्स करते हैं। शेडर्स को ओपनजीएल शेडिंग लैंग्वेज में राइड और कंपाइलड किया जाता है। कंपाइलड प्रोग्राम जीपीयू पर निष्पादित होते हैं।]]'''ओपनजीएल [[ छायांकन भाषा |शेडिंग लैंग्वेज]]''' (जीएलएसएल) [[उच्च स्तरीय प्रोग्रामिंग भाषा|हाई लेवल प्रोग्रामिंग]] लैंग्वेज है। [[सी (प्रोग्रामिंग भाषा)|सी (प्रोग्रामिंग लैंग्वेज)]] पर आधारित सिंटैक्स के साथ हाई लेवल शेडिंग लैंग्वेज, इसे [[ओपनजीएल एआरबी]] (ओपनजीएल आर्किटेक्चर रिव्यू बोर्ड) द्वारा डेवलपर्स को [[एआरबी असेंबली भाषा|एआरबी असेंबली]] लैंग्वेज या हार्डवेयर- | [[File:Linux kernel and OpenGL video games.svg|thumb|[[वीडियो गेम]] रियल टाइम में [[ओपन|ओपनजीएल]] पर [[ग्राफ़िक्स प्रोसेसिंग युनिट]] को रेंडरिंग कैलकुलेशन का आउटसोर्स करते हैं। शेडर्स को ओपनजीएल शेडिंग लैंग्वेज में राइड और कंपाइलड किया जाता है। कंपाइलड प्रोग्राम जीपीयू पर निष्पादित होते हैं।]]'''ओपनजीएल [[ छायांकन भाषा |शेडिंग लैंग्वेज]]''' (जीएलएसएल) [[उच्च स्तरीय प्रोग्रामिंग भाषा|हाई लेवल प्रोग्रामिंग]] लैंग्वेज है। [[सी (प्रोग्रामिंग भाषा)|सी (प्रोग्रामिंग लैंग्वेज)]] पर आधारित सिंटैक्स के साथ हाई लेवल शेडिंग लैंग्वेज, इसे [[ओपनजीएल एआरबी]] (ओपनजीएल आर्किटेक्चर रिव्यू बोर्ड) द्वारा डेवलपर्स को [[एआरबी असेंबली भाषा|एआरबी असेंबली]] लैंग्वेज या हार्डवेयर-स्पेसिफिक लैंग्वेज का उपयोग किए बिना [[ ग्राफ़िक्स पाइपलाइन |ग्राफ़िक्स पाइपलाइन]] का अधिक डायरेक्ट कंट्रोल देने के लिए बनाया गया था। | ||
==पृष्ठभूमि== | ==पृष्ठभूमि== | ||
ग्राफिक्स कार्ड में प्रगति के साथ, [[वर्टेक्स | ग्राफिक्स कार्ड में प्रगति के साथ, [[वर्टेक्स (कंप्यूटर ग्राफिक्स)]] और [[ टुकड़ा (कंप्यूटर ग्राफिक्स) |फ्रैगमेंट (कंप्यूटर ग्राफिक्स)]] लेवल पर रेंडरिंग पाइपलाइन में स्मूथनेस को बढ़ाने के लिए नई सुविधाएँ जोड़ी गई हैं। इस लेवल पर प्रोग्रामेबिलिटी फ्रैगमेंट और वर्टेक्स शेडर्स के उपयोग से प्राप्त की जाती है। | ||
मूल रूप से, यह कार्यक्षमता एआरबी असेंबली लैंग्वेज में शेडर्स लिखकर प्राप्त किया गया था - कठिन और सहज कार्य। ओपनजीएल एआरबी ने विवृत मानकों के लाभ को बनाए रखते हुए ग्राफिक्स प्रोसेसिंग यूनिट की प्रोग्रामिंग के लिए अधिक सरल विधि प्रदान करने के लिए ओपनजीएल शेडिंग लैंग्वेज का निर्माण किया, जिसने ओपनजीएल को उसके सम्पूर्ण इतिहास में संचालित किया है। | मूल रूप से, यह कार्यक्षमता एआरबी असेंबली लैंग्वेज में शेडर्स लिखकर प्राप्त किया गया था - कठिन और सहज कार्य। ओपनजीएल एआरबी ने विवृत मानकों के लाभ को बनाए रखते हुए ग्राफिक्स प्रोसेसिंग यूनिट की प्रोग्रामिंग के लिए अधिक सरल विधि प्रदान करने के लिए ओपनजीएल शेडिंग लैंग्वेज का निर्माण किया, जिसने ओपनजीएल को उसके सम्पूर्ण इतिहास में संचालित किया है। | ||
Line 99: | Line 99: | ||
===ऑपरेटर=== | ===ऑपरेटर=== | ||
जीएलएसएल में [[पॉइंटर (कंप्यूटर प्रोग्रामिंग)]] के एक्सेप्शन के साथ, [[C और C++ में ऑपरेटर| | जीएलएसएल में [[पॉइंटर (कंप्यूटर प्रोग्रामिंग)]] के एक्सेप्शन के साथ, [[C और C++ में ऑपरेटर|सी और सी++ में ऑपरेटरों]] के समान ही ऑपरेटर सम्मिलित हैं। [[बिटवाइज़ ऑपरेटर|बिटवाइज़ ऑपरेटर्स]] को वर्जन 1.30 में जोड़ा गया था। | ||
===फंक्शन और कंट्रोल स्ट्रक्चर=== | ===फंक्शन और कंट्रोल स्ट्रक्चर=== | ||
सी (प्रोग्रामिंग लैंग्वेज) के समान, जीएलएसएल लूप और ब्रांचिंग का समर्थन करता है, उदाहरण | सी (प्रोग्रामिंग लैंग्वेज) के समान, जीएलएसएल लूप और ब्रांचिंग का समर्थन करता है, उदाहरण के लिए, स्विच इत्यादि। कंपाइलेशन के समय रिकर्सन फोर्बिडन है और इसका निरिक्षण किया जाता है। | ||
यूजर-डिफाइन फ़ंक्शन समर्थित हैं और इनबिल्ड फ़ंक्शन प्रदान किए गए हैं। ग्राफिक्स कार्ड क्रिएटर हार्डवेयर लेवल पर इनबिल्ड कार्यों को ऑक्टोमाइज़्ड कर सकता है। इनमें से कई फ़ंक्शन सी प्रोग्रामिंग लैंग्वेज की मैथ लाइब्रेरी के समान हैं जबकि अन्य ग्राफिक्स प्रोग्रामिंग के लिए विशिष्ट हैं। अधिकांश इनबिल्ड फ़ंक्शन और ऑपरेटर, या दोनों ऑपरेंड के लिए, स्केलर और वैक्टर (4 एलिमेंट तक) दोनों पर कार्य कर सकते हैं। सामान्य | यूजर-डिफाइन फ़ंक्शन समर्थित हैं और इनबिल्ड फ़ंक्शन प्रदान किए गए हैं। ग्राफिक्स कार्ड क्रिएटर हार्डवेयर लेवल पर इनबिल्ड कार्यों को ऑक्टोमाइज़्ड कर सकता है। इनमें से कई फ़ंक्शन सी प्रोग्रामिंग लैंग्वेज की मैथ लाइब्रेरी के समान हैं जबकि अन्य ग्राफिक्स प्रोग्रामिंग के लिए विशिष्ट हैं। अधिकांश इनबिल्ड फ़ंक्शन और ऑपरेटर, या दोनों ऑपरेंड के लिए, स्केलर और वैक्टर (4 एलिमेंट तक) दोनों पर कार्य कर सकते हैं। सामान्य बिल्ट इन फ़ंक्शन जो प्रदान किए जाते हैं और सामान्यतः ग्राफ़िक्स उद्देश्यों के लिए उपयोग किए जाते हैं वे हैं: {{code|mix}}, {{code|smoothstep}}, {{code|normalize}}, {{code|inversesqrt}}, {{code|clamp}}, {{code|length}}, {{code|distance}}, {{code|dot}}, {{code|cross}}, {{code|reflect}}, {{code|refract}} और वेक्टर {{code|min}} और {{code|max}}. जैसे अन्य कार्य {{code|abs}}, {{code|sin}}, {{code|pow}}, आदि प्रदान किए गए हैं, किन्तु वे सभी वेक्टर मात्राओं पर भी कार्य कर सकते हैं। अर्थात, {{code|pow(vec3(1.5, 2.0, 2.5), abs(vec3(0.1, -0.2, 0.3)))}} जीएलएसएल [[फ़ंक्शन ओवरलोडिंग]] (इनबिल्ड फ़ंक्शंस और ऑपरेटरों और यूजर-परिभाषित फ़ंक्शंस दोनों के लिए) का समर्थन करता है, इसलिए एक ही नाम के साथ कई फ़ंक्शन परिभाषाएं हो सकती हैं, जिनमें भिन्न-भिन्न संख्या में पैरामीटर या पैरामीटर प्रकार होते हैं। उनमें से प्रत्येक का स्वयं इंडेपेंट रिटर्न टाइप हो सकता है। | ||
=== प्रीप्रोसेसर === | === प्रीप्रोसेसर === | ||
जीएलएसएल [[सी प्रीप्रोसेसर]] (सीपीपी) के सबसेट को परिभाषित करता है, जो वर्जनों और ओपनजीएल एक्सटेंशन को | जीएलएसएल [[सी प्रीप्रोसेसर]] (सीपीपी) के सबसेट को परिभाषित करता है, जो वर्जनों और ओपनजीएल एक्सटेंशन को स्पेसिफाइड करने के लिए स्वयं के विशेष निर्देशों के साथ संयुक्त है। सीपीपी से विस्थापित किये गए भाग {{code|#include}} और {{code|__FILE__}}जैसे फ़ाइल नामों से संबंधित हैं। <ref>{{cite book |title=OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 4.3, Eighth Edition |url=https://www.oreilly.com/library/view/opengl-programming-guide/9780132748445/ch02lev2sec5.html |language=en |chapter=Shader Preprocessor}}</ref> | ||
<nowiki>{{code|GL_ARB_shading_language_include}</nowiki><ref>{{cite web |title=ARB_shading_language_include |url=https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shading_language_include.txt |website=Khronos.org |access-date=2020-05-31}}</ref>(उदाहरण के लिए एनवीडिया ड्राइवरों में प्रारम्भ किया गया<ref>{{cite web |title=NVIDIA driver 265.90 WHQL Quadro |url=https://forums.laptopvideo2go.com/topic/27639-nvidia-driver-26590-whql-quadro/?tab=comments#comment-134520 |website=LaptopVideo2Go Forums}}</ref> विंडोज़ और लिनक्स और सभी मेसा 20.0.0 पर<ref>{{cite web |title=Mesa 20.0.0 Release Notes / 2020-02-19 |url=https://www.mesa3d.org/relnotes/20.0.0.html |website=www.mesa3d.org |access-date=2020-05-31}}</ref> लिनक्स, फ्रीबीएसडी और एंड्रॉइड पर ड्राइवर) उपयोग करने की क्षमता प्रारम्भ करते हैं {{code|#include}} स्रोत कोड में, अतिरिक्त मैन्युअल प्री-प्रोसेसिंग के बिना कई शेडर्स के मध्य कोड और परिभाषाओं को सरलता से साझा करने की अनुमति देता है। समान विस्तार {{code|GL_GOOGLE_include_directive}} और {{code|GL_GOOGLE_cpp_style_line_directive}} वल्कन के साथ जीएलएसएल का उपयोग करने के लिए उपस्थित हैं, और रेफ़्रेन्स एसपीआईआर-वी कंपाइलर ({{code|glslang}} glslangValidator) में समर्थित हैं।<ref>{{cite web |title=#include directive support by antiagainst · Pull Request #46 · KhronosGroup/glslang |url=https://github.com/KhronosGroup/glslang/pull/46 |website=GitHub |access-date=2020-05-31 |language=en}}</ref><ref>{{cite web |title=Preprocessing line number handling by antiagainst · Pull Request #38 · KhronosGroup/glslang |url=https://github.com/KhronosGroup/glslang/pull/38 |website=GitHub |language=en}}</ref><ref>{{cite web |title=Extend the syntax of #line and __FILE__ to support filename strings by antiagainst · Pull Request #43 · KhronosGroup/glslang |url=https://github.com/KhronosGroup/glslang/pull/43 |website=GitHub |language=en}}</ref> | <nowiki>{{code|GL_ARB_shading_language_include}</nowiki><ref>{{cite web |title=ARB_shading_language_include |url=https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shading_language_include.txt |website=Khronos.org |access-date=2020-05-31}}</ref>(उदाहरण के लिए एनवीडिया ड्राइवरों में प्रारम्भ किया गया<ref>{{cite web |title=NVIDIA driver 265.90 WHQL Quadro |url=https://forums.laptopvideo2go.com/topic/27639-nvidia-driver-26590-whql-quadro/?tab=comments#comment-134520 |website=LaptopVideo2Go Forums}}</ref> विंडोज़ और लिनक्स और सभी मेसा 20.0.0 पर<ref>{{cite web |title=Mesa 20.0.0 Release Notes / 2020-02-19 |url=https://www.mesa3d.org/relnotes/20.0.0.html |website=www.mesa3d.org |access-date=2020-05-31}}</ref> लिनक्स, फ्रीबीएसडी और एंड्रॉइड पर ड्राइवर) उपयोग करने की क्षमता प्रारम्भ करते हैं {{code|#include}} स्रोत कोड में, अतिरिक्त मैन्युअल प्री-प्रोसेसिंग के बिना कई शेडर्स के मध्य कोड और परिभाषाओं को सरलता से साझा करने की अनुमति देता है। समान विस्तार {{code|GL_GOOGLE_include_directive}} और {{code|GL_GOOGLE_cpp_style_line_directive}} वल्कन के साथ जीएलएसएल का उपयोग करने के लिए उपस्थित हैं, और रेफ़्रेन्स एसपीआईआर-वी कंपाइलर ({{code|glslang}} glslangValidator) में समर्थित हैं।<ref>{{cite web |title=#include directive support by antiagainst · Pull Request #46 · KhronosGroup/glslang |url=https://github.com/KhronosGroup/glslang/pull/46 |website=GitHub |access-date=2020-05-31 |language=en}}</ref><ref>{{cite web |title=Preprocessing line number handling by antiagainst · Pull Request #38 · KhronosGroup/glslang |url=https://github.com/KhronosGroup/glslang/pull/38 |website=GitHub |language=en}}</ref><ref>{{cite web |title=Extend the syntax of #line and __FILE__ to support filename strings by antiagainst · Pull Request #43 · KhronosGroup/glslang |url=https://github.com/KhronosGroup/glslang/pull/43 |website=GitHub |language=en}}</ref> | ||
== कंपाइलेशन और निष्पादन == | == कंपाइलेशन और निष्पादन == | ||
जीएलएसएल शेडर्स स्टैंड-अलोन अनुप्रयोग नहीं हैं; उन्हें ऐसे एप्लिकेशन की आवश्यकता होती है जो ओपनजीएल एपीआई का उपयोग करता है, जो कई भिन्न-भिन्न प्लेटफार्मों (जैसे, लिनक्स, मैकओएस, माइक्रोसॉफ्ट विंडोज) पर उपलब्ध है। सी (प्रोग्रामिंग लैंग्वेज), [[सी++]], सी शार्प (प्रोग्रामिंग लैंग्वेज) सी#, [[जावास्क्रिप्ट]], डेल्फी (प्रोग्रामिंग लैंग्वेज), [[जावा (प्रोग्रामिंग भाषा)|जावा (प्रोग्रामिंग लैंग्वेज)]], और कई अन्य के लिए | जीएलएसएल शेडर्स स्टैंड-अलोन अनुप्रयोग नहीं हैं; उन्हें ऐसे एप्लिकेशन की आवश्यकता होती है जो ओपनजीएल एपीआई का उपयोग करता है, जो कई भिन्न-भिन्न प्लेटफार्मों (जैसे, लिनक्स, मैकओएस, माइक्रोसॉफ्ट विंडोज) पर उपलब्ध है। सी (प्रोग्रामिंग लैंग्वेज), [[सी++]], सी शार्प (प्रोग्रामिंग लैंग्वेज) सी#, [[जावास्क्रिप्ट]], डेल्फी (प्रोग्रामिंग लैंग्वेज), [[जावा (प्रोग्रामिंग भाषा)|जावा (प्रोग्रामिंग लैंग्वेज)]], और कई अन्य के लिए लैंग्वेज बाइंडिंग हैं। | ||
जीएलएसएल शेडर्स स्वयं [[स्ट्रिंग (कंप्यूटर विज्ञान)]] का | जीएलएसएल शेडर्स स्वयं [[स्ट्रिंग (कंप्यूटर विज्ञान)]] का सेट है जो ओपनजीएल एपीआई के प्रवेश बिंदुओं का उपयोग करके किसी एप्लिकेशन के अंदर से कंपाइलेशन के लिए हार्डवेयर सेलर के ड्राइवर को पास किया जाता है। शेडर्स को किसी एप्लिकेशन के अंदर से शीघ्र बनाया जा सकता है, या टेक्स्ट फ़ाइलों के रूप में रीड किया जा सकता है, किन्तु उन्हें स्ट्रिंग के रूप में ड्राइवर को भेजा जाना चाहिए। | ||
जीएलएसएल कार्यक्रमों को कंपाइलड करने, लिंक करने और पैरामीटर पास करने के लिए उपयोग किए जाने वाले एपीआई का | जीएलएसएल कार्यक्रमों को कंपाइलड करने, लिंक करने और पैरामीटर पास करने के लिए उपयोग किए जाने वाले एपीआई का सेट तीन ओपनजीएल एक्सटेंशन में निर्दिष्ट है, और ओपनजीएल वर्जन 2.0 के रूप में कोर ओपनजीएल का भाग बन गया है। एपीआई को ओपनजीएल 3.2 में ज्योमेट्री शेडर्स, ओपनजीएल 4.0 में टेस्सेलेशन शेडर्स और ओपनजीएल 4.3 में [[कर्नेल की गणना करें|कंप्यूटर शेडर्स]] के साथ विस्तारित किया गया था। ये ओपनजीएल एपीआई एक्सटेंशन में पाए जाते हैं: | ||
* एआरबी वर्टेक्स शेडर | * एआरबी वर्टेक्स शेडर | ||
* एआरबी फ्रैगमेंट शेडर | * एआरबी फ्रैगमेंट शेडर | ||
Line 124: | Line 124: | ||
* एआरबी कंप्यूट शेडर | * एआरबी कंप्यूट शेडर | ||
जीएलएसएल शेडर्स का उपयोग [[वल्कन (एपीआई)]] के साथ भी किया जा सकता है, और वल्कन में शेडर्स का उपयोग करने का यह सामान्य उपाए है। जीएलएसएल शेडर्स को उपयोग से पूर्व या रनटाइम पर एसपीआईआर-वी नामक बाइनरी बाइटकोड | जीएलएसएल शेडर्स का उपयोग [[वल्कन (एपीआई)]] के साथ भी किया जा सकता है, और वल्कन में शेडर्स का उपयोग करने का यह सामान्य उपाए है। जीएलएसएल शेडर्स को उपयोग से पूर्व या रनटाइम पर एसपीआईआर-वी नामक बाइनरी बाइटकोड फॉर्मेट में प्रीकंपाइलड किया जाता है, सामान्यतः ऑफ़लाइन कंपाइलर का उपयोग किया जाता है। | ||
==यह भी देखें== | ==यह भी देखें== | ||
*स्टैंडर्ड पोर्टेबल इंटरमीडिएट रिप्रेजेंटेशन, [[क्रोनोस समूह|क्रोनोस ग्रुप]] द्वारा इंटरमीडिएट शेडर लैंग्वेज | *स्टैंडर्ड पोर्टेबल इंटरमीडिएट रिप्रेजेंटेशन, [[क्रोनोस समूह|क्रोनोस ग्रुप]] द्वारा इंटरमीडिएट शेडर लैंग्वेज है। | ||
*[[3डी कंप्यूटर ग्राफिक्स]] | *[[3डी कंप्यूटर ग्राफिक्स]] | ||
*ख्रोनोस ग्रुप | *ख्रोनोस ग्रुप | ||
Line 135: | Line 135: | ||
===अन्य शेडिंग लैंग्वेज=== | ===अन्य शेडिंग लैंग्वेज=== | ||
*एआरबी असेंबली लैंग्वेज, लो लेवल | *एआरबी असेंबली लैंग्वेज, लो लेवल शेडिंग लैंग्वेज है। | ||
*[[सीजी (प्रोग्रामिंग भाषा)|सीजी (प्रोग्रामिंग लैंग्वेज)]], प्रोग्रामिंग | *[[सीजी (प्रोग्रामिंग भाषा)|सीजी (प्रोग्रामिंग लैंग्वेज)]], प्रोग्रामिंग वर्टेक्स और पिक्सेल शेडर्स के लिए हाई लेवल शेडिंग लैंग्वेज है। | ||
*हाई लेवल शेडर लैंग्वेज, [[Direct3D|डायरेक्ट 3डी]] के साथ उपयोग के लिए हाई लेवल शेडिंग लैंग्वेज | *हाई लेवल शेडर लैंग्वेज, [[Direct3D|डायरेक्ट 3डी]] के साथ उपयोग के लिए हाई लेवल शेडिंग लैंग्वेज है। | ||
*[[टीजीएसआई]], [[गैलियम3डी|गैलियम 3डी]] द्वारा प्रारम्भ की गई लो लेवल इंटरमीडिट लैंग्वेज | *[[टीजीएसआई]], [[गैलियम3डी|गैलियम 3डी]] द्वारा प्रारम्भ की गई लो लेवल इंटरमीडिट लैंग्वेज है। | ||
*एएमडीआईएल, एएमडी में इंटेरली रूप से उपयोग की जाने वाली लो लेवल इंटरमीडिट लैंग्वेज | *एएमडीआईएल, एएमडी में इंटेरली रूप से उपयोग की जाने वाली लो लेवल इंटरमीडिट लैंग्वेज है। | ||
*[[ मानव छायांकन भाषा प्रस्तुत करें |रेंडरमैन शेडिंग | *[[ मानव छायांकन भाषा प्रस्तुत करें |रेंडरमैन शेडिंग लैंग्वेज है।]] | ||
== रेफ़्रेन्स == | == रेफ़्रेन्स == |
Revision as of 10:18, 19 August 2023
ओपनजीएल शेडिंग लैंग्वेज (जीएलएसएल) हाई लेवल प्रोग्रामिंग लैंग्वेज है। सी (प्रोग्रामिंग लैंग्वेज) पर आधारित सिंटैक्स के साथ हाई लेवल शेडिंग लैंग्वेज, इसे ओपनजीएल एआरबी (ओपनजीएल आर्किटेक्चर रिव्यू बोर्ड) द्वारा डेवलपर्स को एआरबी असेंबली लैंग्वेज या हार्डवेयर-स्पेसिफिक लैंग्वेज का उपयोग किए बिना ग्राफ़िक्स पाइपलाइन का अधिक डायरेक्ट कंट्रोल देने के लिए बनाया गया था।
पृष्ठभूमि
ग्राफिक्स कार्ड में प्रगति के साथ, वर्टेक्स (कंप्यूटर ग्राफिक्स) और फ्रैगमेंट (कंप्यूटर ग्राफिक्स) लेवल पर रेंडरिंग पाइपलाइन में स्मूथनेस को बढ़ाने के लिए नई सुविधाएँ जोड़ी गई हैं। इस लेवल पर प्रोग्रामेबिलिटी फ्रैगमेंट और वर्टेक्स शेडर्स के उपयोग से प्राप्त की जाती है।
मूल रूप से, यह कार्यक्षमता एआरबी असेंबली लैंग्वेज में शेडर्स लिखकर प्राप्त किया गया था - कठिन और सहज कार्य। ओपनजीएल एआरबी ने विवृत मानकों के लाभ को बनाए रखते हुए ग्राफिक्स प्रोसेसिंग यूनिट की प्रोग्रामिंग के लिए अधिक सरल विधि प्रदान करने के लिए ओपनजीएल शेडिंग लैंग्वेज का निर्माण किया, जिसने ओपनजीएल को उसके सम्पूर्ण इतिहास में संचालित किया है।
मूल रूप से ओपनजीएल 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]
लैंग्वेज
ऑपरेटर
जीएलएसएल में पॉइंटर (कंप्यूटर प्रोग्रामिंग) के एक्सेप्शन के साथ, सी और सी++ में ऑपरेटरों के समान ही ऑपरेटर सम्मिलित हैं। बिटवाइज़ ऑपरेटर्स को वर्जन 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.