OpenGL संगतता, नामकरण सम्मेलनों और ARB बनाम EXT


14

मैंने सोचा कि मैंने एक सामान्य समझ बनाई है कि ओपनजील नामकरण सम्मेलनों और एक्सटेंशन ने कैसे काम किया, जब तक कि मैं एक मामले पर ठोकर नहीं खाई जो मुझे भ्रमित करता है।


यहाँ मेरी समझ अब तक है:

कोई प्रत्यय नहीं - उदा 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 प्रोफाइल से फ्रेमबफ़र सुविधाएँ चाहता हूँ। मुझे कौन सा एक्सटेंशन और कौन सा फ़ंक्शन-सेट उपयोग करना चाहिए ताकि मुझे अधिकतम हार्डवेयर संगतता कवरेज मिल सके?

जवाबों:


9

प्रश्न 1 - आमतौर पर EXT संस्करण दो या दो से अधिक विक्रेताओं के बीच सहयोग के रूप में आता है। एआरबी एक्सटेंशन को क्रोनोस के मतदान सदस्यों के बीच अधिक चर्चा की आवश्यकता है और अनुमोदित होने से पहले EXT संस्करण से परिवर्तन हो सकते हैं। GL_ARB_direct_state_access एक्सटेंशन देखें जिसमें GL_EXT_direct_state_access की तुलना में कई परिवर्तन हैं।

प्रश्न 2 - GL_ARB_framebuffer_object एक्सटेंशन के इश्यू सेक्शन में बताया गया है कि फ़ंक्शन में ARB प्रत्यय क्यों नहीं हैं:

(() इस विस्तार में नए टोकन और प्रवेश बिंदु अन्य ARB एक्सटेंशन की तरह प्रत्यय क्यों नहीं हैं?

   RESOLVED: Unlike most ARB extensions, this is a strict subset of
   functionality already approved in OpenGL 3.0. This extension
   exists only to support that functionality on older hardware that
   cannot implement a full OpenGL 3.0 driver. Since there are no
   possible behavior changes between the ARB extension and core
   features, source code compatibility is improved by not using
   suffixes on the extension.

प्रश्न 3 - यदि आप फ्रेमबफ़र ऑब्जेक्ट का उपयोग किसी ऐसे संदर्भ पर करना चाहते हैं जहाँ GL संस्करण 3.0 से कम है, तो आपको एक्सटेंशन विकल्प पर ध्यान देने की आवश्यकता है:

  1. यदि GL_ARB_framebuffer_object समर्थित है, तो गैर ARB फ़ंक्शन का उपयोग करें।
  2. यदि केवल GL_EXT_framebuffer_object समर्थित है, तो EXT फ़ंक्शन का उपयोग करें।
  3. यदि न तो एक्सटेंशन का समर्थन किया जाता है, तो आपको पीबफर्स ​​की तरह ओएस स्तर के ऑफस्क्रीन रेंडरिंग में वापस आना होगा।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.