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

From Vigyanwiki
No edit summary
No edit summary
Line 109: Line 109:
जीएलएसएल [[सी प्रीप्रोसेसर]] (सीपीपी) के उपसमुच्चय को परिभाषित करता है, जो संस्करणों और ओपनजीएल एक्सटेंशन को निर्दिष्ट करने के लिए अपने स्वयं के विशेष निर्देशों के साथ संयुक्त है। सीपीपी से विस्थापित किये गए भाग {{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>


  <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>


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

Revision as of 10:38, 13 August 2023

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

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

पृष्ठभूमि

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

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

मूल रूप से ओपनजीएल 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डी कंप्यूटर ग्राफिक्स
  • ख्रोनोस ग्रुप
  • वेबजीएल, वेब ब्राउज़र के लिए ओपनजीएल-ईएस बोली, जो शेडर्स के लिए जीएलएसएल का उपयोग करती है
  • शेडरटॉय
  • एलडब्ल्यूजेजीएल, लाइब्रेरी जिसमें ओपनजीएल के लिए जावा बाइंडिंग सम्मिलित है।

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

संदर्भ

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.


बाहरी संबंध