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

From Vigyanwiki
No edit summary
 
(29 intermediate revisions by 2 users not shown)
Line 3: Line 3:
}}
}}


[[File:Linux kernel and OpenGL video games.svg|thumb|[[वीडियो गेम]] वास्तविक समय में [[ओपन]]जीएल पर [[ग्राफ़िक्स प्रोसेसिंग युनिट]] को रेंडरिंग गणनाओं को आउटसोर्स करते हैं। शेडर्स को ओपनजीएल शेडिंग लैंग्वेज में लिखा और संकलित किया जाता है। संकलित प्रोग्राम GPU पर निष्पादित होते हैं।]]'''ओपनजीएल [[ छायांकन भाषा |शेडिंग लैंग्वेज]]''' (जीएलएसएल) [[उच्च स्तरीय प्रोग्रामिंग भाषा|उच्च स्तरीय प्रोग्रामिंग]] लैंग्वेज है | [[सी (प्रोग्रामिंग भाषा)]] पर आधारित सिंटैक्स के साथ उच्च स्तरीय शेडिंग भाषा, इसे [[ओपनजीएल एआरबी]] (ओपनजीएल आर्किटेक्चर रिव्यू बोर्ड) द्वारा डेवलपर्स को [[एआरबी असेंबली भाषा|एआरबी असेंबली]] लैंग्वेज या हार्डवेयर-विशिष्ट भाषाओं का उपयोग किए बिना [[ ग्राफ़िक्स पाइपलाइन ]] का अधिक प्रत्यक्ष नियंत्रण देने के लिए बनाया गया था।
[[File:Linux kernel and OpenGL video games.svg|thumb|[[वीडियो गेम]] रियल टाइम में [[ओपन|ओपनजीएल]] पर [[ग्राफ़िक्स प्रोसेसिंग युनिट]] को रेंडरिंग कैलकुलेशन का आउटसोर्स करते हैं। शेडर्स को ओपनजीएल शेडिंग लैंग्वेज में राइड और कंपाइलड किया जाता है। कंपाइलड प्रोग्राम जीपीयू पर निष्पादित होते हैं।]]'''ओपनजीएल [[ छायांकन भाषा |शेडिंग लैंग्वेज]]''' (जीएलएसएल) [[उच्च स्तरीय प्रोग्रामिंग भाषा|हाई लेवल प्रोग्रामिंग]] लैंग्वेज है। [[सी (प्रोग्रामिंग भाषा)|सी (प्रोग्रामिंग लैंग्वेज)]] पर आधारित सिंटैक्स के साथ हाई लेवल शेडिंग लैंग्वेज, इसे [[ओपनजीएल एआरबी]] (ओपनजीएल आर्किटेक्चर रिव्यू बोर्ड) द्वारा डेवलपर्स को [[एआरबी असेंबली भाषा|एआरबी असेंबली]] लैंग्वेज या हार्डवेयर-स्पेसिफिक लैंग्वेज का उपयोग किए बिना [[ ग्राफ़िक्स पाइपलाइन |ग्राफ़िक्स पाइपलाइन]] का अधिक डायरेक्ट कंट्रोल देने के लिए बनाया गया था।


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


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


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


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


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


{| class="wikitable"
{| class="wikitable"
|-
|-
! GLSL Version !! OpenGL Version !! Date !! Shader Preprocessor
! जीएलएसएल वर्जन !!ओपनजीएल वर्जन
!डेट
!शेडर प्रीप्रोसेसर
|-
|-
| 1.10.59<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.1.10.pdf|title=GLSL Language Specification, Version 1.10.59}}</ref> || 2.0 || 30 April 2004 || #version 110
| 1.10.59<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.1.10.pdf|title=GLSL Language Specification, Version 1.10.59}}</ref> || 2.0 ||30 अप्रैल 2004
| #वर्जन 110
|-
|-
| 1.20.8<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.1.20.pdf|title=GLSL Language Specification, Version 1.20.8}}</ref> || 2.1 || 07 September 2006 || #version 120
| 1.20.8<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.1.20.pdf|title=GLSL Language Specification, Version 1.20.8}}</ref> || 2.1 ||07 सितम्बर 2006
| #वर्जन 120
|-
|-
| 1.30.10<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.1.30.pdf|title=GLSL Language Specification, Version 1.30.10}}</ref> || 3.0 || 22 November 2009 || #version 130
| 1.30.10<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.1.30.pdf|title=GLSL Language Specification, Version 1.30.10}}</ref> || 3.0 ||22 नवंबर 2009
| #वर्जन 130
|-
|-
| 1.40.08<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.1.40.pdf|title=GLSL Language Specification, Version 1.40.08}}</ref> || 3.1 || 22 November 2009 || #version 140
| 1.40.08<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.1.40.pdf|title=GLSL Language Specification, Version 1.40.08}}</ref> || 3.1 ||22 नवंबर 2009
| #वर्जन 140
|-
|-
| 1.50.11<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.1.50.pdf|title=GLSL Language Specification, Version 1.50.11}}</ref> || 3.2 || 04 December 2009 || #version 150
| 1.50.11<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.1.50.pdf|title=GLSL Language Specification, Version 1.50.11}}</ref> || 3.2 ||04 दिसंबर 2009
| #वर्जन 150
|-
|-
| 3.30.6<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.3.30.pdf|title=GLSL Language Specification, Version 3.30.6}}</ref> ||  3.3 || 11 March 2010 || #version 330
| 3.30.6<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.3.30.pdf|title=GLSL Language Specification, Version 3.30.6}}</ref> ||  3.3 ||11 मार्च 2010
| #वर्जन 330
|-
|-
| 4.00.9<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.00.pdf|title=GLSL Language Specification, Version 4.00.9}}</ref> ||  4.0 || 24 July 2010 || #version 400
| 4.00.9<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.00.pdf|title=GLSL Language Specification, Version 4.00.9}}</ref> ||  4.0 ||24 जुलाई 2010
| #वर्जन 400
|-
|-
| 4.10.6<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.10.pdf|title=GLSL Language Specification, Version 4.10.6}}</ref> ||  4.1 || 24 July 2010 || #version 410
| 4.10.6<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.10.pdf|title=GLSL Language Specification, Version 4.10.6}}</ref> ||  4.1 ||24 जुलाई 2010
| #वर्जन 410
|-
|-
| 4.20.11<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.20.pdf|title=GLSL Language Specification, Version 4.20.11}}</ref> ||  4.2 || 12 December 2011 || #version 420
| 4.20.11<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.20.pdf|title=GLSL Language Specification, Version 4.20.11}}</ref> ||  4.2 ||12 दिसंबर 2011
| #वर्जन 420
|-
|-
| 4.30.8<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.30.pdf|title=GLSL Language Specification, Version 4.30.8}}</ref> ||  4.3 || 7 February 2013 || #version 430
| 4.30.8<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.30.pdf|title=GLSL Language Specification, Version 4.30.8}}</ref> ||  4.3 ||7 फरवरी 2013
| #वर्जन 430
|-
|-
| 4.40.9<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.40.pdf|title=GLSL Language Specification, Version 4.40.9}}</ref> ||  4.4 || 16 June 2014 || #version 440
| 4.40.9<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.40.pdf|title=GLSL Language Specification, Version 4.40.9}}</ref> ||  4.4 ||16 जून 2014
| #वर्जन 440
|-
|-
| 4.50.7<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.50.pdf|title=GLSL Language Specification, Version 4.50.7}}</ref> ||  4.5 || 09 May 2017 || #version 450
| 4.50.7<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.50.pdf|title=GLSL Language Specification, Version 4.50.7}}</ref> ||  4.5 || 09 मई 2017 || #वर्जन 450
|-
|-
| 4.60.5<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.60.pdf|title=GLSL Language Specification, Version 4.60.5}}</ref> ||  4.6 || 14 June 2018 || #version 460
| 4.60.5<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.60.pdf|title=GLSL Language Specification, Version 4.60.5}}</ref> ||  4.6 ||14 जून 2018
| #वर्जन 460
|}
|}
[[ ओपनजीएल एन ]] और [[वेबजीएल]] ओपनजीएल ईएस शेडिंग लैंग्वेज (संक्षिप्त: जीएलएसएल ईएस या ईएसएसएल) का उपयोग करते हैं।
[[ ओपनजीएल एन ]]और [[वेबजीएल]] ओपनजीएल ईएस शेडिंग लैंग्वेज (संक्षिप्त: जीएलएसएल ईएस या ईएसएसएल) का उपयोग करते हैं।
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! GLSL ES version !! OpenGL ES version !! WebGL version !! Based on GLSL version !! Date !! Shader Preprocessor
!जीएलएसएल ईएस वर्जन
!ओपनजीएल ईएस वर्जन
!वेबजीएल वर्जन
!जीएलएसएल वर्जन पर आधारित
!डेट
!शेडर प्रीप्रोसेसर
|-
|-
| 1.00.17<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/es/2.0/GLSL_ES_Specification_1.00.pdf|title=GLSL ES Language Specification, Version 1.00, revision 17}}</ref> || 2.0 || 1.0 || 1.20 || 12 May 2009 || #version 100
| 1.00.17<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/es/2.0/GLSL_ES_Specification_1.00.pdf|title=GLSL ES Language Specification, Version 1.00, revision 17}}</ref> || 2.0 || 1.0 || 1.20 ||12 मई 2009
| #वर्जन 100 ई.एस
|-
|-
| 3.00.6<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/es/3.0/GLSL_ES_Specification_3.00.pdf|title=GLSL ES Language Specification, Version 3.00, revision 6}}</ref> || 3.0 || 2.0 || 3.30 || 29 January 2016 || #version 300 es
| 3.00.6<ref>{{cite web|url=https://www.khronos.org/registry/OpenGL/specs/es/3.0/GLSL_ES_Specification_3.00.pdf|title=GLSL ES Language Specification, Version 3.00, revision 6}}</ref> || 3.0 || 2.0 || 3.30 ||29 जनवरी 2016
| #वर्जन 300 ई.एस
|-
|-
|3.10.5<ref>{{Cite web|title=The OpenGL ES® Shading Language, version 3.10, revision 5|url=https://www.khronos.org/registry/OpenGL/specs/es/3.1/GLSL_ES_Specification_3.10.pdf|url-status=live}}</ref>
|3.10.5<ref>{{Cite web|title=The OpenGL ES® Shading Language, version 3.10, revision 5|url=https://www.khronos.org/registry/OpenGL/specs/es/3.1/GLSL_ES_Specification_3.10.pdf|url-status=live}}</ref>
Line 63: Line 84:
|
|
|GLSL ES 3.00
|GLSL ES 3.00
|29 January 2016
|29 जनवरी 2016
|#version 310 es
|#वर्जन 310 ई.एस
|-
|-
|3.20.6<ref>{{Cite web|title=The OpenGL ES® Shading Language, Version 3.20.6|url=https://www.khronos.org/registry/OpenGL/specs/es/3.2/GLSL_ES_Specification_3.20.pdf|url-status=live}}</ref>
|3.20.6<ref>{{Cite web|title=The OpenGL ES® Shading Language, Version 3.20.6|url=https://www.khronos.org/registry/OpenGL/specs/es/3.2/GLSL_ES_Specification_3.20.pdf|url-status=live}}</ref>
Line 70: Line 91:
|
|
|GLSL ES 3.10
|GLSL ES 3.10
|10 July 2019
|10 जुलाई 2019
|#version 320 es
|#वर्जन 320 ई.एस
|}
|}
दोनों भाषाएँ संबंधित हैं लेकिन सीधे संगत नहीं हैं। इन्हें [[ मानक पोर्टेबल इंटरमीडिएट प्रतिनिधित्व ]]|एसपीआईआरवी-क्रॉस के जरिए आपस में बदला जा सकता है।<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>


== भाषा ==
== लैंग्वेज ==


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


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


उपयोगकर्ता-परिभाषित फ़ंक्शन समर्थित हैं और अंतर्निहित फ़ंक्शन प्रदान किए गए हैं। ग्राफिक्स कार्ड निर्माता हार्डवेयर स्तर पर अंतर्निहित कार्यों को अनुकूलित कर सकता है। इनमें से कई फ़ंक्शन सी प्रोग्रामिंग लैंग्वेजकी गणित लाइब्रेरी के समान हैं जबकि अन्य ग्राफिक्स प्रोग्रामिंग के लिए विशिष्ट हैं। अधिकांश अंतर्निहित फ़ंक्शन और ऑपरेटर, या दोनों ऑपरेंड के लिए, स्केलर और वैक्टर (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)))}}. जीएलएसएल [[फ़ंक्शन ओवरलोडिंग]] (अंतर्निहित फ़ंक्शंस और ऑपरेटरों और उपयोगकर्ता-परिभाषित फ़ंक्शंस दोनों के लिए) का समर्थन करता है, इसलिए ही नाम के साथ कई फ़ंक्शन परिभाषाएं हो सकती हैं, जिनमें अलग-अलग संख्या में पैरामीटर या पैरामीटर प्रकार होते हैं। उनमें से प्रत्येक का अपना स्वतंत्र रिटर्न प्रकार हो सकता है।
यूजर-डिफाइन फ़ंक्शन समर्थित हैं और इनबिल्ड फ़ंक्शन प्रदान किए गए हैं। ग्राफिक्स कार्ड क्रिएटर हार्डवेयर लेवल पर इनबिल्ड कार्यों को ऑक्टोमाइज़्ड कर सकता है। इनमें से कई फ़ंक्शन सी प्रोग्रामिंग लैंग्वेज की मैथ लाइब्रेरी के समान हैं जबकि अन्य ग्राफिक्स प्रोग्रामिंग के लिए विशिष्ट हैं। अधिकांश इनबिल्ड फ़ंक्शन और ऑपरेटर, या दोनों ऑपरेंड के लिए, स्केलर और वैक्टर (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|#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>
  <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 में [[कर्नेल की गणना करें]] के साथ विस्तारित किया गया था। ये OpenGL API ्सटेंशन में पाए जाते हैं:
जीएलएसएल कार्यक्रमों को कंपाइलड करने, लिंक करने और पैरामीटर पास करने के लिए उपयोग किए जाने वाले एपीआई का सेट तीन ओपनजीएल एक्सटेंशन में निर्दिष्ट है, और ओपनजीएल वर्जन 2.0 के रूप में कोर ओपनजीएल का भाग बन गया है। एपीआई को ओपनजीएल 3.2 में ज्योमेट्री शेडर्स, ओपनजीएल 4.0 में टेस्सेलेशन शेडर्स और ओपनजीएल 4.3 में [[कर्नेल की गणना करें|कंप्यूटर शेडर्स]] के साथ विस्तारित किया गया था। ये ओपनजीएल एपीआई एक्सटेंशन में पाए जाते हैं:
* एआरबी शीर्ष शेडर
* एआरबी वर्टेक्स शेडर
* एआरबी फ्रैगमेंट शेडर
* एआरबी फ्रैगमेंट शेडर
* एआरबी शेडर ऑब्जेक्ट
* एआरबी शेडर ऑब्जेक्ट
Line 103: Line 124:
* एआरबी कंप्यूट शेडर
* एआरबी कंप्यूट शेडर


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


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


===अन्य छायांकन भाषाएँ===
===अन्य शेडिंग लैंग्वेज===
*एआरबी असेंबली भाषा, निम्न-स्तरीय छायांकन भाषा
*एआरबी असेंबली लैंग्वेज, लो लेवल शेडिंग लैंग्वेज है।
*[[सीजी (प्रोग्रामिंग भाषा)]], प्रोग्रामिंग शीर्ष और पिक्सेल शेडर्स के लिए उच्च स्तरीय छायांकन भाषा
*[[सीजी (प्रोग्रामिंग भाषा)|सीजी (प्रोग्रामिंग लैंग्वेज)]], प्रोग्रामिंग वर्टेक्स और पिक्सेल शेडर्स के लिए हाई लेवल शेडिंग लैंग्वेज है।
*उच्च-स्तरीय शेडर भाषा, [[Direct3D]] के साथ उपयोग के लिए उच्च-स्तरीय छायांकन भाषा
*हाई लेवल शेडर लैंग्वेज, [[Direct3D|डायरेक्ट 3डी]] के साथ उपयोग के लिए हाई लेवल शेडिंग लैंग्वेज है।
*[[टीजीएसआई]], [[गैलियम3डी]] द्वारा शुरू की गई निम्न-स्तरीय मध्यवर्ती भाषा
*[[टीजीएसआई]], [[गैलियम3डी|गैलियम 3डी]] द्वारा प्रारम्भ की गई लो लेवल इंटरमीडिट लैंग्वेज है।
*एएमडीआईएल, एएमडी में आंतरिक रूप से उपयोग की जाने वाली निम्न-स्तरीय मध्यवर्ती भाषा
*एएमडीआईएल, एएमडी में इंटेरली रूप से उपयोग की जाने वाली लो लेवल इंटरमीडिट लैंग्वेज है।
*[[ मानव छायांकन भाषा प्रस्तुत करें | मानव छायांकन लैंग्वेजप्रस्तुत करें]]
*[[ मानव छायांकन भाषा प्रस्तुत करें |रेंडरमैन शेडिंग लैंग्वेज है।]]


== संदर्भ ==
== रेफ़्रेन्स ==
; Citations
; Citations
{{Reflist}}
{{Reflist}}
Line 148: Line 169:
[[Category: Machine Translated Page]]
[[Category: Machine Translated Page]]
[[Category:Created On 10/08/2023]]
[[Category:Created On 10/08/2023]]
[[Category:Vigyan Ready]]

Latest revision as of 22:14, 2 February 2024

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

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

पृष्ठभूमि

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

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

मूल रूप से ओपनजीएल 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
  • एआरबी टेस्सेलेशन शेडर
  • एआरबी कंप्यूट शेडर

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

यह भी देखें

अन्य शेडिंग लैंग्वेज

रेफ़्रेन्स

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.


बाहरी संबंध