मैं लोगों की एक टीम के साथ एक छोटी टाइल / स्प्राइट-आधारित पीसी गेम पर काम कर रहा हूं, और हम प्रदर्शन के मुद्दों पर चल रहे हैं। पिछली बार मैंने ओपनजीएल का उपयोग 2004 के आसपास किया था, इसलिए मैं खुद को सिखा रहा हूं कि कोर प्रोफाइल का उपयोग कैसे करें, और मैं खुद को थोड़ा भ्रमित कर रहा हूं।
मुझे 250-750 48x48 टाइलों के पड़ोस में स्क्रीन को हर फ्रेम पर खींचने की आवश्यकता है, साथ ही साथ लगभग 50 स्प्राइट भी। टाइलें केवल तब बदलती हैं जब एक नया स्तर लोड होता है, और स्प्राइट हर समय बदल रहे हैं। कुछ टाइलें चार 24x24 टुकड़ों से बनी होती हैं, और स्प्राइट्स के अधिकांश (लेकिन सभी नहीं) टाइल्स के आकार के समान होते हैं। बहुत सारी टाइलें और स्प्राइट अल्फा सम्मिश्रण का उपयोग करते हैं।
अभी मैं यह सब तत्काल मोड में कर रहा हूं, जो मुझे पता है कि एक बुरा विचार है। वही सब, जब हमारी टीम के सदस्यों में से एक इसे चलाने की कोशिश करता है, तो उसे बहुत खराब फ्रेम दर (~ 20-30 एफपीएस) मिलती है, और यह अधिक खराब होता है जब अधिक टाइलें होती हैं, खासकर जब उन टाइलों में से बहुत से प्रकार होते हैं टुकड़ों में काट दिया जाता है। यह सब मुझे लगता है कि समस्या ड्रॉ कॉल की संख्या है।
मैंने इसके कुछ संभावित समाधानों के बारे में सोचा है, लेकिन मैं उन्हें कुछ लोगों द्वारा चलाना चाहता था, जो जानते हैं कि वे किस बारे में बात कर रहे हैं, इसलिए मैं अपना समय कुछ बेवकूफी में बर्बाद नहीं करता:
टाइल्स:
- जब एक स्तर लोड किया जाता है, तो एक बार एक बड़े माननीय बनावट से जुड़े एक फ्रेम बफर में सभी टाइलें खींचें, और हर फ्रेम पर उस बनावट के साथ एक बड़ा आयत बनाएं।
- जब स्तर लोड हो जाता है, तो सभी टाइलों को एक स्थिर वर्टेक्स बफर में डालें और उन्हें इस तरह से खींचें। मुझे नहीं पता कि ग्लैडरेवल्स के लिए एक ही कॉल के साथ अलग-अलग बनावट वाली वस्तुओं को खींचने का कोई तरीका है, या यदि यह कुछ ऐसा है जो मैं करना चाहता हूं। हो सकता है कि बस सभी टाइलों को एक बड़ी विशाल बनावट में रखें और अजीब बनावट के निर्देशांक VBO में इस्तेमाल करें?
स्प्राइट:
- प्रत्येक स्प्राइट को अलग-अलग कॉल के साथ ड्रा करें। ऐसा लगता है कि बहुत सारी बनावट स्विच करना शामिल है, जो मुझे बताया गया है कि खराब है। क्या बनावट सरणियाँ शायद यहाँ उपयोगी हैं?
- किसी तरह गतिशील वीबीओ का उपयोग करें। ऊपर नंबर 2 के रूप में एक ही बनावट सवाल।
- प्वाइंट स्प्राइट? यह शायद मूर्खतापूर्ण है।
क्या इनमें से कोई भी विचार समझदार है? क्या कहीं अच्छा कार्यान्वयन है जो मैं देख सकता था?