OpenGL अनुकूलन युक्तियाँ [बंद]


26

OpenGL को अधिक कुशल बनाने के लिए आपके पास क्या युक्तियाँ या चालें हैं?

जवाबों:


16

GlStart () / glEnd () के बजाय VBO का उपयोग करें। यह डेटा को GPU की मेमोरी में स्थानांतरित करने के लिए चक्र बचाता है।


7
उससे अधिक, glBegin और glEnd को बाद के संशोधनों में हटा दिया गया था और 3.x और उसके बाद के संस्करणों में पूरी तरह से हटा दिया गया था (और इसलिए काम नहीं करेगा)। यदि आप एक OpenGL 3.x संदर्भ का अनुरोध करते हैं, तो आप उन्हें पूरी तरह से उपयोग करने में असमर्थ होंगे।
स्लर्प्स मैड रिप्स

DirectX वास्तव में आपको इस पर बल देता है, इसके बराबर नहीं है glStart()/glEnd()
knight666

@SAHChandler मुझे नहीं पता था कि। मुझे एहसास नहीं हुआ कि यह पदावनत हो गया है।
MrValdez

3
@SAHChandler: वह बेकार है! मैंने glBegin () और glEnd () के साथ अपने सभी ड्राइंग सीखे। , नहीं !!!

8

प्रोफ़ाइल, प्रोफ़ाइल, प्रोफ़ाइल का मानक सिरा यहाँ भी लागू होता है, हालाँकि उपकरण थोड़े भिन्न होते हैं।

gDEBugger आपको हुड के नीचे क्या चल रहा है, यह देखने में मदद करने में महान है। हालांकि यह महंगा है।


2
बस यह जोड़ना चाहता था कि अब यह मुफ़्त है।
डीएम

8

ये Apple के OpenGL पर दस्तावेज़ीकरण संदर्भों से हैं लेकिन हर छोटी सी मदद सही है? ;)

ओपनजीएल प्रदर्शन ऑप्टिमाइज़ेशन:
ओएस एक्स पर ओपनजीएल डेटा थ्रूपुट का अनुकूलन

(यह अंतिम एक नमूना अनुप्रयोग है)
वर्टेक्स ऑप्टिमाइज़ेशन

इस विषय पर (Apple से भी) बहुत बड़ी संख्या में वीडियो उपलब्ध हैं जो OpenGL एक्सटेंशन के बारे में बात करते हैं। उनमें से कुछ ओएस एक्स विशिष्ट हैं, लेकिन कुछ अन्य सामान्यीकृत हैं और सबसे अधिक संभावना विंडोज और लिनक्स पर लागू की जा सकती है।

आप यहां वीडियो पा सकते हैं । हालाँकि उन्हें देखने के लिए आपको iTunes और Apple खाते की आवश्यकता है (लेकिन वे स्वतंत्र हैं!: D)


7

खैर, यह वास्तव में, वास्तव में इस बात पर निर्भर करता है कि आप क्या करने की योजना बना रहे हैं, लेकिन यहां मूल बातें हैं:

  • आपका CPU बहुत कीमती है जबकि आपका GPU भूखा जानवर है। जीपीयू से जितना हो सके उतना परेशान करें। आजकल आप OpenCL, CUDA और थ्रस्ट जैसे उत्कृष्ट पुस्तकालयों के साथ ऐसा कर सकते हैं।

  • अपनी लाइटिंग किसी शैडर में करें। न केवल यह आपकी पवित्रता को बनाए रखने में मदद करेगा, बल्कि यह आपको बहुत शांत चीजों जैसे कि टोंड शेड्स और आस्थगित प्रकाश व्यवस्था की अनुमति देता है ।

  • कण चूसते हैं। ओपनगेल पॉइंट स्प्राइट का उपयोग करते समय भी।


6

अपने राज्य में बदलाव कम से कम करें। बहुत सारे प्लेटफार्मों पर, प्रत्येक राज्य परिवर्तन संभावित रूप से पाइपलाइन को फ्लश करता है। एक जैसी वस्तुओं को एक साथ बैचना और एक बार राज्य को बदलना बेहतर है।


4
glEnable(GL_CULL_FACES);

सिंपल वन लाइनर जो बैक फेस कलिंग लगाता है। यह बहुभुज गिनती को कम करने के लिए उत्कृष्ट है। पॉली काउंट को कम करने के लिए फ्रस्ट्रम / ऑक्यूपेशन कलिंग में भी देखें।

एक और बात जो आपके वैक्टर और क्वाटर्न्स के लिए SIMD है (ज्यादातर कैमरा रोटेशन में उपयोग किया जाता है)। यदि आप ASM के साथ गड़बड़ नहीं करना चाहते हैं तो libSIMD देखें जो C में SIMD को संभालने के लिए एक बेहतरीन लाइब्रेरी है।


4

जब आप स्थानीय चर का उपयोग कर सकते हैं, तो glGet * का उपयोग न करें, जैसे:

  • OpenGL से बनावट आकार क्वेरी न करें, उन्हें चर में लोड करने पर संग्रहीत करें
  • जब आप अपने एप्लिकेशन में परिवर्तनों को संग्रहीत कर सकते हैं, तो OpenGL से लाइन की चौड़ाई / बिंदुओं को क्वेरी न करें

ये कॉल वास्तव में धीमी हैं

GlBegin के बाहर अप्रयुक्त सामान को स्थानांतरित करें - glEnd clause (यह glColor या glNormal या कुछ और हो) अगर यह अंदर नहीं बदलता है। ओपनजीएल एक राज्य मशीन है, यह अंतिम मूल्य का उपयोग करता है।


3

OpenGL कमांड को कम करना प्रमुख है। तो आपको सभी ड्राइंग कमांड को बैच करना चाहिए। 2 डी गेम के लिए, अल्तास टेक्सचर का उपयोग करना और एक ओपेंगल कमांड में समान बनावट साझा करने वाले सभी स्प्राइट्स को आकर्षित करना एक अच्छा विचार है।


सावधान रहे। कम और बड़े बैच उपयोगी होते हैं, लेकिन लक्ष्य प्लेटफॉर्म "बहुत बड़े" बैचों के आधार पर प्रदर्शन में कमी आएगी।
एंड्रियास

3

बैच, बैच, बैच !! (Ab) प्रत्येक ड्रॉ कॉल में जितना संभव हो सके रेंडर करने के लिए GPU का उपयोग करें। खेल ज्यादातर राज्य परिवर्तनों की मात्रा से सीमित होते हैं, त्रिकोणों की मात्रा से बहुत अधिक नहीं।

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