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

From Vigyanwiki
Revision as of 17:05, 18 August 2023 by alpha>Artiverma
वीडियो गेम रियल टाइम में ओपनजीएल पर ग्राफ़िक्स प्रोसेसिंग युनिट को रेंडरिंग कैलकुलेशन का आउटसोर्स करते हैं। शेडर्स को ओपनजीएल शेडिंग लैंग्वेज में राइड और कंपाइलड किया जाता है। कंपाइलड प्रोग्राम जीपीयू पर निष्पादित होते हैं।

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

पृष्ठभूमि

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

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

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

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

यह भी देखें

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

रेफ़्रेन्स

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.


बाहरी संबंध