ओपनजीएल शेडिंग भाषा: Difference between revisions
(Created page with "{{Short description|High-level shading language}} {{distinguish|Open Shading Language}} thumb|[[वीडियो गेम...") |
No edit summary |
||
Line 2: | Line 2: | ||
{{distinguish|Open Shading Language}} | {{distinguish|Open Shading Language}} | ||
[[File:Linux kernel and OpenGL video games.svg|thumb|[[वीडियो गेम]] वास्तविक समय में [[ओपन]]जीएल पर [[ग्राफ़िक्स प्रोसेसिंग युनिट]] को रेंडरिंग गणनाओं को आउटसोर्स करते हैं। शेडर्स को ओपनजीएल शेडिंग लैंग्वेज में लिखा और संकलित किया जाता है। संकलित प्रोग्राम GPU पर निष्पादित होते हैं।]]ओपनजीएल [[ छायांकन भाषा ]] (जीएलएसएल) | [[File:Linux kernel and OpenGL video games.svg|thumb|[[वीडियो गेम]] वास्तविक समय में [[ओपन]]जीएल पर [[ग्राफ़िक्स प्रोसेसिंग युनिट]] को रेंडरिंग गणनाओं को आउटसोर्स करते हैं। शेडर्स को ओपनजीएल शेडिंग लैंग्वेज में लिखा और संकलित किया जाता है। संकलित प्रोग्राम GPU पर निष्पादित होते हैं।]]ओपनजीएल [[ छायांकन भाषा ]] (जीएलएसएल) [[उच्च स्तरीय प्रोग्रामिंग भाषा]] है | [[सी (प्रोग्रामिंग भाषा)]] पर आधारित सिंटैक्स के साथ उच्च स्तरीय शेडिंग भाषा। इसे [[ओपनजीएल एआरबी]] (ओपनजीएल आर्किटेक्चर रिव्यू बोर्ड) द्वारा डेवलपर्स को [[एआरबी असेंबली भाषा]] या हार्डवेयर-विशिष्ट भाषाओं का उपयोग किए बिना [[ ग्राफ़िक्स पाइपलाइन ]] का अधिक प्रत्यक्ष नियंत्रण देने के लिए बनाया गया था। | ||
==पृष्ठभूमि== | ==पृष्ठभूमि== | ||
ग्राफिक्स कार्ड में प्रगति के साथ, [[वर्टेक्स (कंप्यूटर ग्राफिक्स)]] और [[ टुकड़ा (कंप्यूटर ग्राफिक्स) ]] स्तर पर रेंडरिंग पाइपलाइन में लचीलेपन को बढ़ाने के लिए नई सुविधाएँ जोड़ी गई हैं। इस स्तर पर प्रोग्रामेबिलिटी फ्रैगमेंट और वर्टेक्स [[शेडर]]्स के उपयोग से हासिल की जाती है। | ग्राफिक्स कार्ड में प्रगति के साथ, [[वर्टेक्स (कंप्यूटर ग्राफिक्स)]] और [[ टुकड़ा (कंप्यूटर ग्राफिक्स) ]] स्तर पर रेंडरिंग पाइपलाइन में लचीलेपन को बढ़ाने के लिए नई सुविधाएँ जोड़ी गई हैं। इस स्तर पर प्रोग्रामेबिलिटी फ्रैगमेंट और वर्टेक्स [[शेडर]]्स के उपयोग से हासिल की जाती है। | ||
मूल रूप से, यह कार्यक्षमता एआरबी असेंबली भाषा में शेडर्स लिखकर हासिल की गई थी - | मूल रूप से, यह कार्यक्षमता एआरबी असेंबली भाषा में शेडर्स लिखकर हासिल की गई थी - जटिल और सहज कार्य। ओपनजीएल एआरबी ने खुले मानकों के लाभ को बनाए रखते हुए ग्राफिक्स प्रोसेसिंग यूनिट की प्रोग्रामिंग के लिए अधिक सहज विधि प्रदान करने के लिए ओपनजीएल शेडिंग लैंग्वेज का निर्माण किया, जिसने ओपनजीएल को उसके पूरे इतिहास में संचालित किया है। | ||
मूल रूप से ओपनजीएल 1.4 के विस्तार के रूप में पेश किया गया, जीएलएसएल को औपचारिक रूप से 2004 में ओपनजीएल एआरबी द्वारा ओपनजीएल 2.0 कोर में शामिल किया गया था। 1992 में ओपनजीएल 1.0 के निर्माण के बाद से यह ओपनजीएल का पहला बड़ा संशोधन था। | मूल रूप से ओपनजीएल 1.4 के विस्तार के रूप में पेश किया गया, जीएलएसएल को औपचारिक रूप से 2004 में ओपनजीएल एआरबी द्वारा ओपनजीएल 2.0 कोर में शामिल किया गया था। 1992 में ओपनजीएल 1.0 के निर्माण के बाद से यह ओपनजीएल का पहला बड़ा संशोधन था। | ||
Line 73: | Line 73: | ||
|} | |} | ||
दोनों भाषाएँ संबंधित हैं लेकिन सीधे संगत नहीं हैं। इन्हें [[ मानक पोर्टेबल इंटरमीडिएट प्रतिनिधित्व ]]|एसपीआईआरवी-क्रॉस के जरिए आपस में बदला जा सकता है।<ref>{{Citation|title=KhronosGroup/SPIRV-Cross|date=2019-09-06|url=https://github.com/KhronosGroup/SPIRV-Cross|publisher=The Khronos Group|access-date=2019-09-08}}</ref> | दोनों भाषाएँ संबंधित हैं लेकिन सीधे संगत नहीं हैं। इन्हें [[ मानक पोर्टेबल इंटरमीडिएट प्रतिनिधित्व ]]|एसपीआईआरवी-क्रॉस के जरिए आपस में बदला जा सकता है।<ref>{{Citation|title=KhronosGroup/SPIRV-Cross|date=2019-09-06|url=https://github.com/KhronosGroup/SPIRV-Cross|publisher=The Khronos Group|access-date=2019-09-08}}</ref> | ||
== भाषा == | == भाषा == | ||
Line 83: | Line 82: | ||
सी (प्रोग्रामिंग भाषा) के समान, जीएलएसएल लूप और ब्रांचिंग का समर्थन करता है, उदाहरण के लिए: यदि-अन्यथा, के लिए, स्विच इत्यादि। संकलन के दौरान रिकर्सन निषिद्ध है और इसकी जांच की जाती है। | सी (प्रोग्रामिंग भाषा) के समान, जीएलएसएल लूप और ब्रांचिंग का समर्थन करता है, उदाहरण के लिए: यदि-अन्यथा, के लिए, स्विच इत्यादि। संकलन के दौरान रिकर्सन निषिद्ध है और इसकी जांच की जाती है। | ||
उपयोगकर्ता-परिभाषित फ़ंक्शन समर्थित हैं और अंतर्निहित फ़ंक्शन प्रदान किए गए हैं। ग्राफिक्स कार्ड निर्माता हार्डवेयर स्तर पर अंतर्निहित कार्यों को अनुकूलित कर सकता है। इनमें से कई फ़ंक्शन सी प्रोग्रामिंग भाषा की गणित लाइब्रेरी के समान हैं जबकि अन्य ग्राफिक्स प्रोग्रामिंग के लिए विशिष्ट हैं। अधिकांश अंतर्निहित फ़ंक्शन और ऑपरेटर, | उपयोगकर्ता-परिभाषित फ़ंक्शन समर्थित हैं और अंतर्निहित फ़ंक्शन प्रदान किए गए हैं। ग्राफिक्स कार्ड निर्माता हार्डवेयर स्तर पर अंतर्निहित कार्यों को अनुकूलित कर सकता है। इनमें से कई फ़ंक्शन सी प्रोग्रामिंग भाषा की गणित लाइब्रेरी के समान हैं जबकि अन्य ग्राफिक्स प्रोग्रामिंग के लिए विशिष्ट हैं। अधिकांश अंतर्निहित फ़ंक्शन और ऑपरेटर, या दोनों ऑपरेंड के लिए, स्केलर और वैक्टर (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> | ||
{{code|GL_ARB_shading_language_include}विस्तार का<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> | {{code|GL_ARB_shading_language_include}विस्तार का<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 में [[कर्नेल की गणना करें]] के साथ विस्तारित किया गया था। ये OpenGL API ्सटेंशन में पाए जाते हैं: | ||
* एआरबी वर्टेक्स शेडर | * एआरबी वर्टेक्स शेडर | ||
* एआरबी फ्रैगमेंट शेडर | * एआरबी फ्रैगमेंट शेडर | ||
Line 104: | Line 102: | ||
* एआरबी कंप्यूट शेडर | * एआरबी कंप्यूट शेडर | ||
जीएलएसएल शेडर्स का उपयोग [[वल्कन (एपीआई)]] के साथ भी किया जा सकता है, और वल्कन में शेडर्स का उपयोग करने का यह | जीएलएसएल शेडर्स का उपयोग [[वल्कन (एपीआई)]] के साथ भी किया जा सकता है, और वल्कन में शेडर्स का उपयोग करने का यह सामान्य तरीका है। जीएलएसएल शेडर्स को उपयोग से पहले या रनटाइम पर एसपीआईआर-वी नामक बाइनरी बाइटकोड प्रारूप में पूर्व-संकलित किया जाता है, आमतौर पर ऑफ़लाइन कंपाइलर का उपयोग करते हुए। | ||
==यह भी देखें== | ==यह भी देखें== | ||
*स्टैंडर्ड पोर्टेबल इंटरमीडिएट रिप्रेजेंटेशन, [[क्रोनोस समूह]] द्वारा | *स्टैंडर्ड पोर्टेबल इंटरमीडिएट रिप्रेजेंटेशन, [[क्रोनोस समूह]] द्वारा इंटरमीडिएट शेडर भाषा | ||
*[[3डी कंप्यूटर ग्राफिक्स]] | *[[3डी कंप्यूटर ग्राफिक्स]] | ||
*ख्रोनोस ग्रुप | *ख्रोनोस ग्रुप | ||
*वेबजीएल, वेब ब्राउज़र के लिए | *वेबजीएल, वेब ब्राउज़र के लिए ओपनजीएल-ईएस बोली, जो शेडर्स के लिए जीएलएसएल का उपयोग करती है | ||
*[[शेडरटॉय]] | *[[शेडरटॉय]] | ||
*[[LWJGL]], | *[[LWJGL]], लाइब्रेरी जिसमें OpenGL के लिए जावा बाइंडिंग शामिल है। | ||
===अन्य छायांकन भाषाएँ=== | ===अन्य छायांकन भाषाएँ=== | ||
*एआरबी असेंबली भाषा, | *एआरबी असेंबली भाषा, निम्न-स्तरीय छायांकन भाषा | ||
*[[सीजी (प्रोग्रामिंग भाषा)]], प्रोग्रामिंग वर्टेक्स और पिक्सेल शेडर्स के लिए | *[[सीजी (प्रोग्रामिंग भाषा)]], प्रोग्रामिंग वर्टेक्स और पिक्सेल शेडर्स के लिए उच्च स्तरीय छायांकन भाषा | ||
*उच्च-स्तरीय शेडर भाषा, [[Direct3D]] के साथ उपयोग के लिए | *उच्च-स्तरीय शेडर भाषा, [[Direct3D]] के साथ उपयोग के लिए उच्च-स्तरीय छायांकन भाषा | ||
*[[टीजीएसआई]], [[गैलियम3डी]] द्वारा शुरू की गई | *[[टीजीएसआई]], [[गैलियम3डी]] द्वारा शुरू की गई निम्न-स्तरीय मध्यवर्ती भाषा | ||
*एएमडीआईएल, एएमडी में आंतरिक रूप से उपयोग की जाने वाली | *एएमडीआईएल, एएमडी में आंतरिक रूप से उपयोग की जाने वाली निम्न-स्तरीय मध्यवर्ती भाषा | ||
*[[ मानव छायांकन भाषा प्रस्तुत करें ]] | *[[ मानव छायांकन भाषा प्रस्तुत करें ]] | ||
Revision as of 19:04, 12 August 2023
ओपनजीएल छायांकन भाषा (जीएलएसएल) उच्च स्तरीय प्रोग्रामिंग भाषा है | सी (प्रोग्रामिंग भाषा) पर आधारित सिंटैक्स के साथ उच्च स्तरीय शेडिंग भाषा। इसे ओपनजीएल एआरबी (ओपनजीएल आर्किटेक्चर रिव्यू बोर्ड) द्वारा डेवलपर्स को एआरबी असेंबली भाषा या हार्डवेयर-विशिष्ट भाषाओं का उपयोग किए बिना ग्राफ़िक्स पाइपलाइन का अधिक प्रत्यक्ष नियंत्रण देने के लिए बनाया गया था।
पृष्ठभूमि
ग्राफिक्स कार्ड में प्रगति के साथ, वर्टेक्स (कंप्यूटर ग्राफिक्स) और टुकड़ा (कंप्यूटर ग्राफिक्स) स्तर पर रेंडरिंग पाइपलाइन में लचीलेपन को बढ़ाने के लिए नई सुविधाएँ जोड़ी गई हैं। इस स्तर पर प्रोग्रामेबिलिटी फ्रैगमेंट और वर्टेक्स शेडर्स के उपयोग से हासिल की जाती है।
मूल रूप से, यह कार्यक्षमता एआरबी असेंबली भाषा में शेडर्स लिखकर हासिल की गई थी - जटिल और सहज कार्य। ओपनजीएल एआरबी ने खुले मानकों के लाभ को बनाए रखते हुए ग्राफिक्स प्रोसेसिंग यूनिट की प्रोग्रामिंग के लिए अधिक सहज विधि प्रदान करने के लिए ओपनजीएल शेडिंग लैंग्वेज का निर्माण किया, जिसने ओपनजीएल को उसके पूरे इतिहास में संचालित किया है।
मूल रूप से ओपनजीएल 1.4 के विस्तार के रूप में पेश किया गया, जीएलएसएल को औपचारिक रूप से 2004 में ओपनजीएल एआरबी द्वारा ओपनजीएल 2.0 कोर में शामिल किया गया था। 1992 में ओपनजीएल 1.0 के निर्माण के बाद से यह ओपनजीएल का पहला बड़ा संशोधन था।
जीएलएसएल का उपयोग करने के कुछ लाभ हैं:
- Linux, macOS और Microsoft Windows सहित कई ऑपरेटिंग सिस्टम पर क्रॉस-प्लेटफॉर्म अनुकूलता।
- शेडर्स लिखने की क्षमता जिसका उपयोग किसी भी हार्डवेयर विक्रेता के ग्राफिक्स कार्ड पर किया जा सकता है जो ओपनजीएल शेडिंग लैंग्वेज का समर्थन करता है।
- प्रत्येक हार्डवेयर विक्रेता अपने ड्राइवर में GLSL कंपाइलर शामिल करता है, इस प्रकार प्रत्येक विक्रेता को अपने विशेष ग्राफिक्स कार्ड के आर्किटेक्चर के लिए अनुकूलित कोड बनाने की अनुमति मिलती है।
संस्करण
जीएलएसएल संस्करण ओपनजीएल एपीआई के विशिष्ट संस्करणों के साथ विकसित हुए हैं। यह केवल ओपनजीएल संस्करण 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 के लिए जावा बाइंडिंग शामिल है।
अन्य छायांकन भाषाएँ
- एआरबी असेंबली भाषा, निम्न-स्तरीय छायांकन भाषा
- सीजी (प्रोग्रामिंग भाषा), प्रोग्रामिंग वर्टेक्स और पिक्सेल शेडर्स के लिए उच्च स्तरीय छायांकन भाषा
- उच्च-स्तरीय शेडर भाषा, Direct3D के साथ उपयोग के लिए उच्च-स्तरीय छायांकन भाषा
- टीजीएसआई, गैलियम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.