जो मैंने पढ़ा है, ऐसा लगता है कि ओपनजीएल ईएस 2.0 ओपनजीएल 2.1 की तरह कुछ नहीं है, जो मैंने पहले से लिया था।
परिभाषित करें "यह कुछ भी नहीं है"। डेस्कटॉप जीएल 2.1 में फंक्शंस का एक गुच्छा है जो ईएस 2.0 में नहीं है। लेकिन दोनों का सबसे आम सबसेट है जो दोनों पर काम करेगा (हालांकि आपको बनावट छवि लोडिंग के लिए चीजों को झुका देना होगा, क्योंकि वहां कुछ महत्वपूर्ण अंतर हैं)।
डेस्कटॉप जीएल 3.x बहुत सारी कार्यक्षमता प्रदान करता है जो अप्रत्याशित ES 2.0 बस नहीं करता है। फ्रेमबफर ऑब्जेक्ट्स 3.x में कोर हैं, जबकि वे 2.0 में एक्सटेंशन हैं (और फिर भी, आपको केवल एक गंतव्य एक्सटेंशन के बिना एक गंतव्य छवि मिलती है)। प्रतिक्रिया, पूर्णांक बनावट, वर्दी बफर वस्तुओं, और ज्यामिति शेडर्स बदल गया है। ये सभी विशिष्ट हार्डवेयर विशेषताएं हैं जो या तो ईएस 2.0 में उपलब्ध नहीं हैं, या केवल एक्सटेंशन के माध्यम से उपलब्ध हैं। जिनमें से कुछ प्लेटफॉर्म-विशिष्ट हो सकते हैं।
लेकिन डेस्कटॉप जीएल 3.x पर कुछ अच्छी एपीआई सुविधा सुविधाएं भी उपलब्ध हैं।); स्पष्ट विशेषता स्थानों (layout(location=#)
), VAOs, आदि
उदाहरण के लिए, अगर मैं इस किताब को पढ़ना शुरू, मैं अपना समय अगर मैं बंदरगाह के लिए (बेशक NDK का प्रयोग करके) Android के लिए इंजन की योजना बर्बाद कर रहा हूँ?
यह इस बात पर निर्भर करता है कि आप कितना काम करना चाहते हैं और आप इसे काम करने के लिए क्या करने के लिए तैयार हैं। कम से कम, आपको ओपनजीएल ईएस 2.0 क्या करता है, इस पर पढ़ना चाहिए, ताकि आप यह जान सकें कि यह डेस्कटॉप जीएल से अलग कैसे है।
वास्तविक हार्डवेयर सुविधाओं से बचना आसान है। बनावट (या एकाधिक बनावटों) में प्रस्तुत करना कुछ ऐसा है जिसे आपके एल्गोरिदम द्वारा बुलाया जाता है। जैसा कि फीडबैक बदलना है, ज्यामिति शेडर्स इत्यादि। तो आपको इसकी कितनी जरूरत है इस पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं, और एल्गोरिदम के आधार पर विकल्प हो सकते हैं।
जिस चीज पर आपको पकड़ने की अधिक संभावना है, वह सुविधा डेस्कटॉप जीएल 3.x की विशेषताएं हैं। उदाहरण के लिए:
layout(location = 0) in vec4 position;
यह ES 2.0 में संभव नहीं है। ऐसा ही एक परिभाषा होगा:
attribute vec4 position;
कि ES 2.0 में काम करेगा, लेकिन यह नहींposition
विशेषता कारण विशेषता सूचकांक 0 के साथ जुड़े होने हैं।कार्यक्रम से जुड़े होने से पहले glBindAttribLocation
का उपयोग करके कोड के माध्यम से किया जाना है। डेस्कटॉप जीएल यह भी अनुमति देता है, लेकिन जिस पुस्तक से आपने लिंक किया है वह ऐसा नहीं करता है। स्पष्ट कारणों से (यह 3.3-आधारित पुस्तक है, कोई भी पुराने जीएल संस्करणों के साथ संगतता बनाए रखने की कोशिश नहीं कर रहा है)।
वर्दी बफर एक और है। पुस्तक उदार का उपयोग करती है, खासकर साझा परिप्रेक्ष्य matrices के लिए। यह इसके लिए एक सरल और प्रभावी तकनीक है। लेकिन ईएस 2.0 में यह सुविधा नहीं है; इसमें केवल प्रति-प्रोग्राम वर्दी है।
फिर से, यदि आप चाहें तो सामान्य सबसेट पर कोड कर सकते हैं। यही है, आप जानबूझकर स्पष्ट विशेषता स्थानों, वर्दी बफर, वर्टेक्स सरणी ऑब्जेक्ट्स और इसी तरह का उपयोग कर जा सकते हैं। लेकिन वह पुस्तक वास्तव में आपको ऐसा करने में मदद करने के लिए नहीं जा रही है।
क्या यह आपके समय का कचरा होगा? खैर, यह पुस्तक आपको ओपनजीएल 3.3 एपीआई सिखाने के लिए नहीं है (यह ऐसा करती है, लेकिन यह बात नहीं है)। पुस्तक आपको ग्राफिक्स प्रोग्रामिंग सिखाती है; यह 3.3 एपीआई का उपयोग करने के लिए बस इतना होता है। आपके द्वारा सीखने वाले कौशल (हार्डवेयर आधारित हैं) को छोड़कर आप किसी भी एपीआई या सिस्टम में स्थानांतरण कर रहे हैं जिसमें शेडर्स शामिल हैं।
इसे इस तरह से रखें: यदि आपको ग्राफिक्स प्रोग्रामिंग बहुत कुछ नहीं पता है, तो इससे कोई फर्क नहीं पड़ता कि आप कौन सी एपीआई सीखने के लिए उपयोग करते हैं। एक बार जब आप अवधारणाओं को महारत हासिल कर लेते हैं, तो आप विभिन्न दस्तावेज पढ़ सकते हैं और समझ सकते हैं कि उन अवधारणाओं को किसी भी नए एपीआई को आसानी से कैसे लागू किया जाए।
बिल्कुल सही - बस मुझे जो चाहिए था। धन्यवाद। :) – zeboidlund
लेआउट क्वालीफायर वास्तव में ईएस 2.0 में उपलब्ध है। आपको अपने जीएलएसएल में "#extension GL_EXT_separate_shader_objects: सक्षम" निर्दिष्ट करने की आवश्यकता है और आप अभी भी "इन" के बजाय "विशेषता" का उपयोग करते हैं। –
@ निकोलबोलस जो गलत है। यह स्पष्ट रूप से बताता है कि "ARB_explicit_attrib_location कार्यक्षमता पर भी कार्य करता है" – Speed