OpenGL के चार अलग-अलग प्रमुख संस्करण हैं, जो मोबाइल उपकरणों और एम्बेडेड सिस्टम (OpenGL | ES) के संस्करणों की गणना नहीं करते हैं और जावास्क्रिप्ट (WebGL) के माध्यम से वेब। जैसे Direct3D 11 में Direct3D 8 की तुलना में चीजों को करने का एक अलग तरीका है, वैसे ही OpenGL 3 में OpenGL 1 की तुलना में चीजों को करने का एक अलग तरीका है। बड़ा अंतर यह है कि OpenGL संस्करण पुराने संस्करणों में केवल एड-ऑन हैं (लेकिन नहीं पूरी तरह से)।
OpenGL के विभिन्न संस्करणों और संस्करणों के शीर्ष पर, मुख्य OpenGL ने प्रोफाइल की अवधारणा को भी जोड़ा। मुख्य रूप से संगतता प्रोफ़ाइल (जो पुराने संस्करणों से एपीआई के लिए समर्थन को सक्षम करता है) और कोर प्रोफ़ाइल (जो उन पुराने एपीआई को अक्षम करता है)। glBegin
जब आप कोर प्रोफाइल का उपयोग करते हैं तो ऐसी चीजें काम नहीं करती हैं, लेकिन जब आप संगतता प्रोफ़ाइल का उपयोग करेंगे (जो कि डिफ़ॉल्ट है)।
एक और बड़ी जटिलता के रूप में, OpenGL के कुछ कार्यान्वयन (जैसे Apple, दूसरों के बीच में) केवल नए OpenGL फीचर को सक्षम करेंगे, जब आप कोर प्रोफाइल का उपयोग कर रहे होंगे। इसका मतलब यह है कि नए APIs का उपयोग करने के लिए आपको पुराने API का उपयोग बंद करना होगा ।
फिर आप ट्यूटोरियल के लिए कई बहुत भ्रामक परिदृश्यों को समाप्त करते हैं:
- ट्यूटोरियल पुराना है और केवल अपग्रेड किए गए एपीआई का उपयोग करता है।
- ट्यूटोरियल नया और अच्छी तरह से लिखा गया है और केवल कोर-संगत एपीआई का उपयोग करता है।
- ट्यूटोरियल नया है, लेकिन यह मानने की गलती करता है कि आप एक ड्राइवर के साथ काम कर रहे हैं जो सभी एपीआई को संगतता मोड में सक्षम बनाता है, और नए और पुराने दोनों एपीआई को स्वतंत्र रूप से मिलाता है।
- ट्यूटोरियल OpenGL की तरह के एक अलग संस्करण के लिए है OpenGL | ES जो किसी भी संस्करण में किसी भी पुराने APIs का समर्थन नहीं करता है।
जैसी चीजें हैं glBegin
उन्हें कभी-कभी तत्काल मोड एपीआई कहा जाता है। यह भी सुपर भ्रामक है क्योंकि ओपनजीएल में एक बरकरार मोड जैसी कोई चीज नहीं है और "तत्काल मोड" में पहले से ही ग्राफिक्स में एक अलग परिभाषा थी। यह ज्यादा बेहतर है कि आप उन लोगों को ही देखें जो OpenGL 2.1 के बाद से अप्रचलित हैं।
OpenGL की 1.x API तुरंत पुराने दिनों में ग्राफिक्स पाइपलाइन को लंबवत प्रस्तुत करेगी। यह अच्छी तरह से काम करता है जब हार्डवेयर की गति जो लंबवत प्रस्तुत की गई थी, वह सीपीयू की गति के साथ लगभग बराबर थी, जो शीर्ष डेटा उत्पन्न करती थी। OpenGL वापस तो त्रिभुज रेखांकन बंद कर दिया और बहुत कुछ नहीं।
इन दिनों, GPU उन्नत वर्टेक्स और पिक्सेल ट्रांसफ़ॉर्मेशन करते समय बहुत अधिक गति से बड़े पैमाने पर चबाने के माध्यम से चबा सकता है और सीपीयू आसानी से दूर नहीं रख सकता है। उसके शीर्ष पर, CPU और GPU के बीच का इंटरफ़ेस इस गति अंतर के आसपास डिज़ाइन किया गया है, जिसका अर्थ है कि अब एक बार में GPU एक को वर्जन सबमिट करना संभव नहीं है।
सभी GL ड्राइवरों को glBegin
आंतरिक रूप से एक वर्टेक्स बफर को आबंटित करके अनुकरण करना चाहिए , जो glVertex
इस बफर के साथ जमा किए गए सिरों को लगाते हैं , और फिर जब कॉल किया glEnd
जाता है तो उस पूरे बफर को सिंगल ड्रा कॉल में सबमिट करते हैं । इन फ़ंक्शंस का ओवरहेड कहीं अधिक है यदि आपने अभी-अभी अपने आप को वर्टेक्स बफर अपडेट किया है, यही वजह है कि कुछ डॉक्यूमेंटेशन (बहुत गलती से!) वर्टेक्स बफ़र्स को "एक ऑप्टिमाइज़ेशन" के रूप में संदर्भित करते हैं (यह एक अनुकूलन नहीं है; यह वास्तव में एकमात्र तरीका है GPU से बात करें)।
कई अन्य एपीआई हैं जो पिछले कुछ वर्षों में ओपनजीएल में पदावनत या बाधित किए गए हैं। तथाकथित फिक्स्ड-फ़ंक्शन पाइपलाइन एक और ऐसा टुकड़ा है। कुछ प्रलेखन अभी भी इस पाइपलाइन का उपयोग कर सकते हैं या प्रोग्राम योग्य पाइपलाइन के साथ मिश्रण कर सकते हैं। फिक्स्ड-फंक्शन पाइपलाइन पुराने दिनों से आती है जब ग्राफिक्स 3 डी दृश्यों को प्रस्तुत करने के लिए उपयोग किए जाने वाले गणित के सभी हार्ड-कोडित होते हैं और ओपनजीएल एपीआई उस गणित के लिए कुछ कॉन्फ़िगरेशन मान सेट करने के लिए सीमित था। इन दिनों हार्डवेयर में बहुत कम हार्ड-कोडेड गणित होता है और (आपके सीपीयू की तरह) इसके बजाय उपयोगकर्ता-आपूर्ति वाले प्रोग्राम (अक्सर शेड्स कहा जाता है) चलाता है।
एक बार फिर से ड्राइवरों को पुराने एपीआई का अनुकरण करना चाहिए क्योंकि फिक्स्ड-फंक्शन फीचर्स अभी हार्डवेयर पर मौजूद नहीं हैं। इसका मतलब यह है कि ड्राइवर में संगतता शेडर्स का एक गुच्छा होता है, जो उस पुराने गणित को निर्धारित-फ़ंक्शन दिनों से निष्पादित करता है जो तब उपयोग किया जाता है जब आप अपने स्वयं के शेड्स की आपूर्ति नहीं करते हैं। पुराने OpenGL फ़ंक्शन जो उस पुराने फिक्स्ड-फ़ंक्शन स्टेट (पुराने OpenGL लाइटिंग API की तरह) को संशोधित करते हैं, वे वास्तव में ड्राइवर की संगतता शेड्स को इन मानों को खिलाने के लिए समान बफ़र जैसी आधुनिक OpenGL सुविधाओं का उपयोग कर रहे हैं।
अनुकूलता का समर्थन करने वाले ड्राइवरों को यह पता लगाने के लिए कि आपको इन अप्रचलित सुविधाओं का उपयोग कर रहे हैं और सुनिश्चित करें कि आप उन्हें आधुनिक सुविधाओं के साथ सुचारू रूप से जोड़ सकते हैं, जो ओवरहेड जोड़ता है और ड्राइवर को बहुत जटिल करता है, बहुत सारे बैक-द-सीन काम करते हैं। यह एक कारण है कि कुछ ड्राइवर आपको कोर प्रोफाइल को नई सुविधाओं पर लाने के लिए सक्षम करते हैं; यह पुराने और नए दोनों APIs को एक साथ उपयोग करने के लिए समर्थन नहीं करने के द्वारा उनके ड्राइवर इंटर्न को बहुत सरल करता है।
बहुत सारे प्रलेखन की सिफारिश की जा सकती है कि आप पुराने एपीआई के साथ शुरू करते हैं बस उन्हें शुरू करने के लिए आसान होने के कारण। Direct3D ने शुरुआती लोगों के लिए इस समस्या को हल किया एक साथी पुस्तकालय ( डायरेक्टएक्स टूल किट ) जो सरल ड्राइंग एपीआई और पूर्व-लिखित शेड प्रदान करता है जो आपकी विशेषज्ञता बढ़ने पर कच्चे Direct3D 11 उपयोग के साथ स्वतंत्र रूप से मिलाया जा सकता है। व्यापक OpenGL समुदाय ज्यादातर शुरुआती के लिए संगतता प्रोफ़ाइल के साथ फंस गया है, दुर्भाग्य से, जो समस्याग्रस्त है क्योंकि फिर से ऐसे सिस्टम हैं जो आपको नए के साथ पुराने OpenGL API को मिश्रण करने की अनुमति नहीं देते हैं। सुविधाओं और लक्ष्य के उपयोग के मामलों और भाषाओं के अलग-अलग स्तरों के साथ नए ओपनजीएल पर सरल प्रतिपादन के लिए अनौपचारिक पुस्तकालय और उपकरण हैं ( मोनूगामे उदाहरण के लिए .NET उपयोगकर्ताओं के लिए), लेकिन आधिकारिक तौर पर कुछ भी समर्थन या व्यापक रूप से सहमत नहीं हुआ।
आपके द्वारा खोजा जा रहा दस्तावेज़ीकरण OpenGL के लिए भी नहीं हो सकता है, लेकिन अन्य समान API में से एक के लिए हो सकता है। OpenGL | ES 1.x में फिक्स्ड-फंक्शन रेंडरिंग थी, लेकिन वर्टेक्स सबमिशन के लिए OpenGL 1.x APIs नहीं थे। OpenGL | ES 2.x + और WebGL 1+ में कोई निश्चित-फ़ंक्शन सुविधाएँ नहीं हैं और उन API के लिए कोई पश्चगामी संगतता मोड नहीं है।
ये API मुख्य OpenGL के समान ही दिखते हैं; वे काफी संगत नहीं हैं, लेकिन OpenGL के लिए आधिकारिक एक्सटेंशन हैं कि कुछ (सभी नहीं) ड्राइवर ओपन के साथ संगत बनने के लिए समर्थन करते हैं। ES (जो WebGL पर आधारित है)। क्योंकि चीजें पहले पर्याप्त भ्रमित नहीं थीं।