GLSL शेड्स के लिए सही फाइल एक्सटेंशन क्या है? [बन्द है]


127

मैं glsl छायांकन सीख रहा हूं और मैं विभिन्न फ़ाइल स्वरूपों में आया हूं। मैंने देखा है कि लोग अपने शीर्ष और टुकड़े टुकड़े .vertऔर .fragएक्सटेंशन दे रहे हैं। लेकिन मैंने भी देखा है .vshऔर .fshएक्सटेंशन, और यहां तक ​​कि दोनों एक ही .glslफाइल में एक साथ मिलाते हैं । तो मैं सोच रहा था कि क्या कोई मानक फ़ाइल प्रारूप है, या कौन सा तरीका 'सही' है?


10
जहाँ तक मुझे पता है, उनके पास "सही" एक्सटेंशन नहीं है, क्योंकि ओपनजीएल उन्हें डिस्क वैसे भी नहीं पढ़ेगी।
zneak

2
कुछ लोग उन्हें स्पष्ट करने के लिए उन्हें .vs और .fs (.gs) कहते हैं। लेकिन जैसा कि zneak ने कहा, यह वास्तव में मायने नहीं रखता है, कोई "सही" चीज नहीं है।
डेमोन

11
जीएडिट का उपयोग करता है .glslvऔर .glslfजब वाक्य रचना हाइलाइटिंग चुनने। यही एकमात्र स्थान है जहां मैंने देखा है कि यह कहां मायने रखता है।
पियोट्र्स प्रेज़मो

जवाबों:


90

GLSL शेड्स के लिए कोई मानक फ़ाइल एक्सटेंशन नहीं है। सबसे आम शायद .vertऔर हैं .frag, क्योंकि ये ऐसे विस्तार हैं जो 3 डी लैब्स ने अपने कुछ टूल में उपयोग किए हैं। लेकिन यह मानक विस्तार के किसी भी रूप के लिए इसके बारे में है।


20
मुझे नहीं लगता है। विस्तार एक ऐसी चीज है जो किसी फ़ाइल के सामान्य वर्ग की पहचान करती है। उन्हें शायद उन्हें vertex.glsl और fragment.glsl कहना चाहिए था।
ऑटोडिडैक्ट

5
मैं भी हैरान था, लेकिन क्या सिंटेक्स और वर्टीकल शेपर्स के बीच के सिंटैक्स में थोड़ा अंतर नहीं है, @SandeepDatta? उसी तरह से .h और .c आम में बहुत कुछ साझा कर सकते हैं, लेकिन वे विभिन्न तरीकों से उपयोग किए जाते हैं।
जोसेफ हम्फ्री

7
@ संदीपदत्त .hppबनाम .cpp? .hबनाम .c? C / C ++ हेडर और सोर्स फाइल्स के बीच वर्टेक्स और फ्रेग्मेंट शेड्स के बीच ज्यादा सिंटैक्स और सिमेंटिक अंतर हैं।
मील्स रुट

1
@ माइल्सआउट के बारे में बोलने के लिए भी नहीं .cc

42
GLSLang, जिसे GLSL संदर्भ पार्सर या संदर्भ संकलक के रूप में भी जाना जाता है , 3Dlabs द्वारा विकसित उपकरणों में से एक है । इसे opengl.org और khronos.org दोनों पर एसडीके टूल के रूप में सूचीबद्ध किया गया है। README सूचियों फ़ाइल एक्सटेंशन यह शेडर फ़ाइलों के लिए उम्मीद: .vert(शिखर), .frag(टुकड़ा), .tesc(चौकोर नियंत्रण), .tese(चौकोर मूल्यांकन), .geom(ज्यामिति), .comp(गणना)।
TachyonVortex

93

कल्पना में कोई आधिकारिक विस्तार नहीं है। OpenGL फ़ाइलों से लोडिंग शेड्स को संभालता नहीं है; आप बस एक स्ट्रिंग के रूप में shader कोड में पास होते हैं, इसलिए कोई विशिष्ट फ़ाइल प्रारूप नहीं है।

हालाँकि, glslang , Khronos का संदर्भ GLSL संकलक / सत्यापनकर्ता, यह निर्धारित करने के लिए निम्न एक्सटेंशन का उपयोग करता है कि फ़ाइल किस प्रकार की है:

  • .vert - एक वर्टेकर shader
  • .tesc - एक टेसलेशन नियंत्रण shader
  • .tese - एक त्वरण मूल्यांकन shader t
  • .geom - एक ज्यामिति shader
  • .frag - एक टुकड़ा shader
  • .comp - एक गणना shader

18

एक्सटेंशन द्वारा फ़ाइल प्रकार की पहचान करना विंडोज के लिए विशिष्ट बात है। अन्य सभी ऑपरेटिंग सिस्टम अलग-अलग तरीकों का उपयोग करते हैं: मैकओएस एक्स फ़ाइल सिस्टम प्रविष्टियों में एक विशेष मेटाडेटा संरचना में फ़ाइल प्रकार को संग्रहीत करता है। अधिकांश * nixes ज्ञात "मैजिक बाइट्स" के डेटाबेस के खिलाफ अपनी आंतरिक संरचना का परीक्षण करके फ़ाइलों की पहचान करते हैं; हालाँकि पाठ संपादक एक्सटेंशन का उपयोग करते हैं।

वैसे भी, GLSL स्रोत किसी अन्य प्रोग्राम स्रोत फ़ाइल की तरह हैं: सादे पाठ, और यह उनकी फ़ाइल प्रकार है।

आप अपनी इच्छानुसार एक्सटेंशन चुन सकते हैं। मैं निम्नलिखित नामकरण का उपयोग करता हूं:

  • ts.glsl
  • gs.glsl
  • vs.glsl
  • fs.glsl

लेकिन यह मेरी पसंद है और तकनीकी रूप से मेरे कार्यक्रम किसी भी नामकरण या विस्तार योजना को लागू नहीं करते हैं। नामकरण मनुष्य को पढ़ने और जानने के लिए है कि इसमें क्या है; एक सामान्य प्रमुख एक्सटेंशन होने के लिए मुझे केवल एक फ़ाइल एक्सटेंशन सेट के लिए सिंटैक्स हाइलाइंग नियम की आवश्यकता होती है।


5
डाउनवोट किया गया क्योंकि OS X मुख्य रूप से वर्षों से फ़ाइल एक्सटेंशन का उपयोग कर रहा है।
फ्रेडरिक स्लीजकरमैन

6
@FrederikSlijkerman: नहीं, यह नहीं है। MacOS X अपने मूल में एक यूनिक्स है और फ़ाइल एक्सटेंशन का उपयोग किसी भी चीज़ की पहचान के लिए कभी नहीं किया गया था। हां, मानक प्रकार को मानक फ़ाइल एक्सटेंशन मिलते हैं, लेकिन यह केवल एक मानव पठनीयता है। हो सकता है कि खोजक फ़ाइल एक्सटेंशन पर कुछ प्रकारों के लिए अनुमान के रूप में भरोसा कर सकते हैं। लेकिन अगर यह किसी फ़ाइल को उसके हेडर या कुछ मैजिक बाइट्स से पूरी तरह पहचान सकता है, तो वह इसका उपयोग करेगा। किसी भी यूनिक्स आधारित प्रणाली की तरह।
डेटेनवुल्फ

3
+1 मैं उन्हें प्रभाव-नाम -fs.glsl या प्रभाव-नाम -vs.glsl नाम देता हूं।
लीजेंड्स 2

9
मुझे एहसास हुआ कि ओएस एक्स तर्क के लिए मुझे दो साल की देरी है, लेकिन मुझे ऐसा महसूस हुआ कि मुझे अपने दो सेंट में फेंक देना चाहिए। फ़ाइल संघों को निर्धारित करने के लिए UNIX परत के ऊपर सब कुछ LaunchServices का उपयोग करता है। प्रत्येक फ़ाइल में एक प्रकार का पहचानकर्ता होता है com.stackoverflow.file, जिसे मेटाडेटा के रूप में संग्रहीत किया जाता है। मेटाडेटा प्रविष्टि मौजूद है, तो LaunchServices पहली बार MIME प्रकार से यह अनुमान लगाने की कोशिश करता है। यदि नहीं, तो यह विस्तार के लिए दिखेगा। यदि यह मेल नहीं खा सकता है, तो यह एक HFS निर्माता कोड के लिए दिखेगा। अगर वहाँ कोई नहीं है, यह देता है। LaunchServices कभी भी किसी फ़ाइल को उसके हेडर या मैजिक बाइट्स द्वारा पहचानने की कोशिश नहीं करता है।
zneak

2
इसका मतलब यह है कि ओएस एक्स पर एक फ़ाइल के प्रकार का निर्धारण करने का सबसे आम तरीका इसका विस्तार है। यह केवल इस बात की पहचान करने के लिए है कि किस फाइल का इस्तेमाल किस फाइल को खोलने के लिए किया जाना चाहिए। एक बार एप्लिकेशन फ़ाइल को खोलने के बाद, यह स्वयं तय कर सकता है कि वह इसके साथ क्या करना चाहता है, भले ही कंटेंट टाइप के लिए एक्सटेंशन सही हो।
zneak

7

जैसा कि दूसरों ने उल्लेख किया है कि सख्त अर्थों में सही उत्तर नहीं है। यह उल्लेख करता है कि उदात्त (v2 और v3 के लिए पुष्टि की गई) सिंटैक्स हाइलाइटिंग और सत्यापन के लिए .vert और .frag की भी अपेक्षा करता है।


2
मेरा मानना ​​है कि यह केवल तभी सही है जब आपके पास सबलाइम में जीएलएसएल लाइब्रेरी स्थापित हो, जैसे github.com/WebGLTools/GL-Shader-Validator - मेरा डिफ़ॉल्ट सबलाइम एक्सटेंशन को नहीं पहचानता है।
एयर

आपके द्वारा जोड़ा गया अब तक का सबसे लोकप्रिय (और संभवतः केवल?) जीएलएसएल का उपठेके के लिए देयता है, और मैंने कहा कि क्या उम्मीद है कि क्या उदात्त की अपेक्षा है। यदि आप कहते हैं कि एक अतिवृद्धि मैं दोषी हूँ। लेकिन हाँ आप कम से कम उतने ही सही हैं जितना कि उदात्त पाठ संपादक के रूप में उदात्तता किसी भी पाठ को खोल देगी जबकि एक्सटेंशन के बारे में पता नहीं चलता।
वीवरमाउंट

1
आज के रूप में उदात्त- glsl ( github.com/euler0/sublime-glsl ) सबसे लोकप्रिय GLSL प्लगइन है और यह एक्सटेंशन के निम्नलिखित सेट को स्वीकार करता है vs, fs, gs, vsh, fsh, gsh, vshader, fshader, gshader, vert, frag, geom, tesc, tese, comp, glsl:। तो वहाँ से चुनने के लिए एक किस्म है :)
F Lekschas

-1

लिखने के दो तरीके हैं।

आप char *चर चर और टुकड़ा shader सामग्री को एक चर में संकलित कर सकते हैं और एक कार्यक्रम के लिए shader को संकलित, लिंक और संलग्न कर सकते हैं।

दूसरा तरीका यह है कि आप जिस भी एक्सटेंशन को पसंद करते हैं उसके साथ अलग-अलग शीर्ष और खंड shader फ़ाइल को लिखें और प्रोग्राम को कंपाइल करने, लिंक करने और संलग्न करने के लिए इसे पढ़ें।

जब तक आप इसे पढ़ना जानते हैं, तब तक नामकरण सम्मेलन, जैसे .vert / .frag, .vsdr / .fsdr, आदि सभी मान्य हैं।


-2

जैसा कि पहले ही कई प्रतिक्रियाओं द्वारा कवर किया जा चुका है, वास्तव में कोई मानक नहीं है; यह उस दृष्टिकोण को अपनाना है जो आपके लिए सबसे अधिक उपयोगी है।

मैं टाइप-विशिष्ट shader एक्सटेंशन का उपयोग करने में लाभ देख सकता हूं, लेकिन मेरी प्राथमिकता सभी प्रकार के shader के लिए .glsl एक्सटेंशन का उपयोग करना है, क्योंकि आपको केवल यह परिभाषित करने की आवश्यकता है कि शेल एक बार फ़ाइल का उपयोग कैसे करता है।

इसी तरह, यह भी एक अच्छा विकल्प है यदि आप नोटपैड ++ में अपनी शेडर फ़ाइलों को संपादित करते हैं, क्योंकि आप इसे केवल एक फ़ाइल एक्सटेंशन को निर्दिष्ट करके अपनी सभी shader फ़ाइलों पर हाइलाइटिंग भाषा-विशिष्ट सिंटैक्स को स्वचालित रूप से लागू करने के लिए कॉन्फ़िगर कर सकते हैं।

इस दृष्टिकोण के लिए नकारात्मक पक्ष यह है कि आपको अपने फ़ाइल नाम से शेडर के प्रकार को निर्धारित करने के लिए अपने स्वयं के नामकरण सम्मेलन का उपयोग करने की आवश्यकता है लेकिन, मेरे लिए, लाभ लागत से अधिक है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.