OpenGL को अधिक कुशल बनाने के लिए आपके पास क्या युक्तियाँ या चालें हैं?
OpenGL को अधिक कुशल बनाने के लिए आपके पास क्या युक्तियाँ या चालें हैं?
जवाबों:
GlStart () / glEnd () के बजाय VBO का उपयोग करें। यह डेटा को GPU की मेमोरी में स्थानांतरित करने के लिए चक्र बचाता है।
glStart()/glEnd()
।
ये Apple के OpenGL पर दस्तावेज़ीकरण संदर्भों से हैं लेकिन हर छोटी सी मदद सही है? ;)
ओपनजीएल प्रदर्शन ऑप्टिमाइज़ेशन:
ओएस एक्स पर ओपनजीएल डेटा थ्रूपुट का अनुकूलन
(यह अंतिम एक नमूना अनुप्रयोग है)
वर्टेक्स ऑप्टिमाइज़ेशन
इस विषय पर (Apple से भी) बहुत बड़ी संख्या में वीडियो उपलब्ध हैं जो OpenGL एक्सटेंशन के बारे में बात करते हैं। उनमें से कुछ ओएस एक्स विशिष्ट हैं, लेकिन कुछ अन्य सामान्यीकृत हैं और सबसे अधिक संभावना विंडोज और लिनक्स पर लागू की जा सकती है।
आप यहां वीडियो पा सकते हैं । हालाँकि उन्हें देखने के लिए आपको iTunes और Apple खाते की आवश्यकता है (लेकिन वे स्वतंत्र हैं!: D)
खैर, यह वास्तव में, वास्तव में इस बात पर निर्भर करता है कि आप क्या करने की योजना बना रहे हैं, लेकिन यहां मूल बातें हैं:
आपका CPU बहुत कीमती है जबकि आपका GPU भूखा जानवर है। जीपीयू से जितना हो सके उतना परेशान करें। आजकल आप OpenCL, CUDA और थ्रस्ट जैसे उत्कृष्ट पुस्तकालयों के साथ ऐसा कर सकते हैं।
अपनी लाइटिंग किसी शैडर में करें। न केवल यह आपकी पवित्रता को बनाए रखने में मदद करेगा, बल्कि यह आपको बहुत शांत चीजों जैसे कि टोंड शेड्स और आस्थगित प्रकाश व्यवस्था की अनुमति देता है ।
कण चूसते हैं। ओपनगेल पॉइंट स्प्राइट का उपयोग करते समय भी।
अपने राज्य में बदलाव कम से कम करें। बहुत सारे प्लेटफार्मों पर, प्रत्येक राज्य परिवर्तन संभावित रूप से पाइपलाइन को फ्लश करता है। एक जैसी वस्तुओं को एक साथ बैचना और एक बार राज्य को बदलना बेहतर है।
glEnable(GL_CULL_FACES);
सिंपल वन लाइनर जो बैक फेस कलिंग लगाता है। यह बहुभुज गिनती को कम करने के लिए उत्कृष्ट है। पॉली काउंट को कम करने के लिए फ्रस्ट्रम / ऑक्यूपेशन कलिंग में भी देखें।
एक और बात जो आपके वैक्टर और क्वाटर्न्स के लिए SIMD है (ज्यादातर कैमरा रोटेशन में उपयोग किया जाता है)। यदि आप ASM के साथ गड़बड़ नहीं करना चाहते हैं तो libSIMD देखें जो C में SIMD को संभालने के लिए एक बेहतरीन लाइब्रेरी है।
जब आप स्थानीय चर का उपयोग कर सकते हैं, तो glGet * का उपयोग न करें, जैसे:
ये कॉल वास्तव में धीमी हैं
GlBegin के बाहर अप्रयुक्त सामान को स्थानांतरित करें - glEnd clause (यह glColor या glNormal या कुछ और हो) अगर यह अंदर नहीं बदलता है। ओपनजीएल एक राज्य मशीन है, यह अंतिम मूल्य का उपयोग करता है।
OpenGL कमांड को कम करना प्रमुख है। तो आपको सभी ड्राइंग कमांड को बैच करना चाहिए। 2 डी गेम के लिए, अल्तास टेक्सचर का उपयोग करना और एक ओपेंगल कमांड में समान बनावट साझा करने वाले सभी स्प्राइट्स को आकर्षित करना एक अच्छा विचार है।