मैंने सोचा कि मैंने एक सामान्य समझ बनाई है कि ओपनजील नामकरण सम्मेलनों और एक्सटेंशन ने कैसे काम किया, जब तक कि मैं एक मामले पर ठोकर नहीं खाई जो मुझे भ्रमित करता है।
यहाँ मेरी समझ अब तक है:
कोई प्रत्यय नहीं - उदा glGenBuffers()
। यह फ़ंक्शन कोर प्रोफ़ाइल का एक हिस्सा है। विकि पृष्ठ मुझसे कहता है कि इस कोर प्रोफ़ाइल संस्करण 1.5 से शुरू करने के लिए जोड़ा गया है।
एआरबी - जैसे glGenBuffersARB()
। यह फ़ंक्शन मानकीकृत GL_ARB_vertex_buffer_object
विस्तार का हिस्सा है । इस विस्तार की कल्पना स्पष्ट रूप GenBuffersARB()
से "नई प्रक्रिया और कार्य" अनुभाग में घोषित करती है। "निर्भरता" अनुभाग मुझे बताता है कि मैं संभावित रूप से 1.4+ संदर्भ से इसे एक्सेस कर सकता हूं, अगर हार्डवेयर एक्सटेंशन का समर्थन करता है।
EXT - ये विक्रेता-विशिष्ट एक्सटेंशन और फ़ंक्शन हैं जो केवल कुछ विक्रेता ही समर्थन कर सकते हैं। वर्टेक्स बफर ऑब्जेक्ट को रजिस्ट्री में कोई EXT एक्सटेंशन नहीं लगता है।
यहाँ मेरी समझ टूट जाती है:
glGenFramebuffers
, विकी शो के रूप में , 3.0 में कोर में जोड़ा गया था।
अब मैं 3.0 से कम कोर प्रोफाइल संस्करण में फ्रेम बफर सुविधाओं तक पहुंचना चाहता हूं। इसलिए मैं इसे विस्तार के रूप में उपयोग करना चाहता हूं। कल्पना रजिस्ट्री मुझे बताती है कि दो उपलब्ध एक्सटेंशन हैं - ARB और EXT ।
प्रश्न 1 - यदि ARB एक्सटेंशन मौजूद है, तो EXT एक्सटेंशन क्यों मौजूद है? क्या आप हमेशा विक्रेता-विशिष्ट एक पर मानकीकृत एक का चयन नहीं करेंगे?
"नई प्रक्रियाओं और कार्यों" अनुभाग में एआरबी कल्पना पर एक नज़र मुझे बताती है कि विस्तार GenRenderbuffers()
फ़ंक्शन को परिभाषित करता है । इस समय कोई ARB प्रत्यय नहीं है। GLEW में फंक्शन प्रोटोटाइप बिल्कुल नहीं है glGenRenderbuffersARB()
। अजीब।
EXT युक्ति GenRenderbuffersEXT()
में नए फ़ंक्शन अनुभाग में एक फ़ंक्शन है, और GLEW भी है glGenRenderbuffersEXT()
।
प्रश्न 2 - अगर कोई EXT प्रत्यय है तो कोई ARB प्रत्यय क्यों? ARB के लिए यह कैसे काम करता है, यह देखते हुए कि ARB फ़ंक्शन और कोर फ़ंक्शन के नाम समान हैं?
प्रश्न 3 - मैं अंततः 1.4 प्रोफाइल से फ्रेमबफ़र सुविधाएँ चाहता हूँ। मुझे कौन सा एक्सटेंशन और कौन सा फ़ंक्शन-सेट उपयोग करना चाहिए ताकि मुझे अधिकतम हार्डवेयर संगतता कवरेज मिल सके?