शुद्ध OpenGL या GLSL जाओ? [बन्द है]


11

मुझे ग्राफिक प्रोग्रामिंग का अध्ययन करने में दिलचस्पी थी इसलिए ओपनग्लास सीखने के लिए स्पष्ट प्रवेश बिंदु था। लेकिन फ़ोरम और साइटों के बारे में बिखरी हुई जानकारी इकट्ठा करना, ऐसा लगता है कि एक शुद्ध ओपेनग्ल कार्यान्वयन लागू हो रहा है क्योंकि ज्यादातर चीजें प्री-3.0 से हटा दी जा रही हैं और अमेज़ॅन पर एक समीक्षा उद्धृत कर रही है, "3.0 के बाद से यह सभी शेड्स के बारे में है"। मैंने जो किताबें देखी हैं, उनमें से भी ऐसा लगता है कि केवल शानदार संस्करण नए संस्करण को कवर करता है, लेकिन केवल आंशिक रूप से क्योंकि पुस्तक का एक अच्छा हिस्सा पदावनत कार्यों को सिखाता है, और विशेष रूप से जीएलएसएल के लिए किताबें हैं।

यह वह जगह है जहां मैं अपनी पहली समस्या में भाग गया था, कुछ हार्डवेयर जीएलएसएल का समर्थन नहीं करते हैं, जिसमें इंटेल एकीकृत ग्राफिक्स के साथ नोटबुक भी शामिल है जिसे मैंने उपयोग करने की योजना बनाई थी। कार्यक्रम

GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);

एक विभाजन दोष का कारण बनता है और इसके चालक से मेरा ड्राइवर शेड्स का समर्थन नहीं करता है

तो मेरा सवाल यह है कि केवल ओपन में गेम बनाने की व्यवहार्यता क्या है? क्या मुझे shader भाषा से अपूरणीय अच्छी सुविधाएँ नहीं मिलेंगी? और किस तरह के हार्डवेयर (पुराने जीन i3, i5, i7, पुराने VGA) मैं ठीक से शेप वाले गेम को चलाने की उम्मीद कर सकता हूं?


1
GLSL है ओपन, मैं आपके सवाल का कि क्या हार्डवेयर आप के प्रयोग पर इरादा ओपन 3 संगत है, विशेष रूप से संगत GLSL नहीं संबंधित है लगता है।
डेक्लेरेटेडकविअर

@ डैनियल तो अगर एक हार्डवेयर / ड्राइवर OpenGL 3.0 है तो यह GLSL संगत है?
ibrabeicker

1
GLSL OpenGL 3.0 विनिर्देश का हिस्सा है, हां, यह मामला है।
डेक्लेरेटेडकविअर

1
आप कहते हैं, "इससे लगता है कि मेरा ड्राइवर शेड्स का समर्थन नहीं करता है।" OpenGL का कौन सा संस्करण आपको मिल रहा है? क्या आप सभी उपलब्ध OpenGL फ़ंक्शंस को सही तरीके से लोड कर रहे हैं?
निकोल बोलस

1
@Papavoikos: यदि यह NULL देता है, तो आपको shaders का उपयोग करने की तुलना में बहुत बड़ी समस्याएं हैं। क्या आप अपने OpenGL संदर्भ को सही तरीके से बना रहे हैं? याद रखें: आप तब तक कोई GL फ़ंक्शन नहीं कह सकते जब तक कि आपके पास एक मान्य संदर्भ बनाया और चालू न हो।
निकोल बोल्स

जवाबों:


9

Shader कोड निश्चित रूप से स्पष्ट है और glTexEnv, glTexGen और बनावट मैट्रिक्स कॉल की गड़बड़ी से समझने में आसान है, और इसमें बोनस है कि आप इसका उपयोग करके किसी भी अधिक-या-कम मनमाने ढंग से गणित ऑपरेशन को व्यक्त कर सकते हैं (जिसे आप तय नहीं कर सकते। पाइपलाइन - जिसे आप "शुद्ध ओपनगेल" कह रहे हैं)। एकमात्र संभावित नकारात्मक पक्ष यह है कि आपको अपने कोड में बुनियादी ढांचे के समर्थन की एक निश्चित राशि लिखने की जरूरत है, इससे पहले कि आप उनका उपयोग करना शुरू कर सकें, जबकि पुराने तरीके से आप सही में बहुत अधिक गोता लगा सकते हैं। मैं कॉल करता हूं कि "संभावित" डाउनसाइड क्योंकि मैं। वास्तव में लगता है कि यह आपको चीजों को तैयार करता है और पहले से थोड़ा अधिक सीखता है - ओपनजीएल के लिए "आसान" होने के लिए एक प्रतिष्ठा है और आप कभी-कभी लोगों को इस से बेवकूफ बनाते हुए देखते हैं और सही तरीके से डाइविंग करते हुए वास्तव में यह जानते हुए कि वे पहले क्या कर रहे हैं

हार्डवेयर-वार आप पिछले 5/6/7 वर्षों में जारी किए गए लगभग किसी भी चीज़ पर भरोसा कर सकते हैं, जिसमें कुछ हद तक shader समर्थन है, लेकिन - पुराने Intels (9xx श्रृंखला में से कुछ) के मामले में - यह GLSL नहीं होने जा रहा है, लेकिन इसके बजाय पुराने GL_ARB_vertex_program और GL_ARB_fragment_program एक्सटेंशन होंगे। ये असेंबली लैंग्वेज जैसी shader language का इस्तेमाल करते हैं, लेकिन - कन्फेशन टाइम - मैं व्यक्तिगत रूप से इसका काफी शौकीन हूं। यह वास्तव में उपयोग करने के लिए काफी आसान है, अगर कुछ और आधुनिक सुविधाओं (जैसे ब्रांचिंग) में कमी है और समान कार्य करने के लिए अधिक कोड की आवश्यकता होती है। इन एक्सटेंशनों के लिए आपके मुख्य कार्यक्रम में सहायक बुनियादी ढाँचा जीएलएसएल की तुलना में बहुत अधिक हल्का है।

यह कहने के लिए नहीं है कि मैं उन्हें GLSL से अधिक की सिफारिश करूंगा, लेकिन वे एक ऐसा विकल्प है जो वहां है अगर आपको वास्तव में हार्डवेयर के इस वर्ग पर चलने की आवश्यकता है और यह पता होना उपयोगी है कि वे मौजूद हैं, जो मुझे अंतिम बिंदु पर लाता है । क्या आप वास्तव में निश्चित हैं कि आपको वास्तव में हार्डवेयर के इस वर्ग पर चलने की आवश्यकता है (जैसे कि आपकी नोटबुक के मामले में आपको प्रवेश बिंदुओं को प्राप्त करने के लिए सिर्फ उपेक्षित किया जा सकता है)?


मैंने इस तथ्य की पूरी तरह से उपेक्षा की कि मेसा 3 डी अभी भी ओपेंग्ल 2.1 विनिर्देश पर है। मैं ठीक करूँगा
ibrabeicker

6

यह भी ध्यान दिया जाना चाहिए कि अब कोई "शुद्ध ओपनगैल" नहीं है।

ओपनजीएल ईएस 2.0 ने सभी गैर-शेडर सामान खोद लिए, और चूंकि वेबजीएल इस पर आधारित है, इसलिए यह केवल शेड के साथ काम करता है। OpenGL 3.0 ने सभी फिक्स्ड-फंक्शन सामान को हटा दिया, और 3.1 ने इसे हटा दिया (कोर प्रोफाइल में। अधिकांश कार्यान्वयन संगतता प्रोफाइल का समर्थन करते हैं, लेकिन MacOSX उनके 3.2 कार्यान्वयन के लिए नहीं है)।

इसलिए मैं नॉन-शेडर ओपनगेल सीखने का सुझाव नहीं दूंगा।


6

यदि आपने अतीत में कोई प्रोग्रामिंग की है, तो जीएलएसएल का उपयोग करके अपने स्वयं के shader कोड लिखना अधिक सुखद होगा। मैंने मूल रूप से फिक्स्ड-फंक्शन ओपनजीएल सीखने की कोशिश की और यह मेरे लिए कठिन था क्योंकि इसका कोई मतलब नहीं था। फिर मैंने नारंगी किताब का उपयोग करके जीएलएसएल सीखने की कोशिश की और यह बहुत आसान था और तब से अधिक बना है। बस मेरे 2 सेंट।

मैं GPU के लिए प्रोग्राम लिखने की शक्ति के कारण निश्चित रूप से GLSL की ओर जाऊंगा।

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