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