2011-03-29 13 views
6

विश्लेषण उपकरण द्वारा दी गई ओपनजीएल एपीआई उपयोग प्रदर्शन चेतावनियों की सूची के माध्यम से स्लोगिंग, मुझे लगता है कि हम प्रति फ्रेम कई लॉजिकल बफर लोड उत्पन्न कर रहे हैं - जहां हम एक बफर साफ़ नहीं कर रहे हैं क्योंकि ड्रॉ कॉल पूरी तरह से इसे ओवरराइट करता है।आईओएस ओपनजीएल ईएस लॉजिकल बफर लोड

काउंटरिंट्यूटिव रूप से, glClear() पेश करने के लिए इन मामलों के लिए कॉल केवल glClear() कॉल पर चेतावनी का स्थान ले जाती है। ऐप्पल GL_EXT_discard_framebuffer लागू करता है, हालांकि इसका उपयोग स्वयं चेतावनी को रोकने के लिए पर्याप्त नहीं है। glDiscardFramebufferEXT() के बाद glClear() चेतावनी को रोकता है, और प्रदर्शन में काफी सुधार करता है, लेकिन glClear() कॉल में बफर को साफ़ करने में समय लगता है, जो हमारे उपयोग मामले में एक अनावश्यक ऑपरेशन है।

क्या दूसरों को यह भी लगता है कि उन्हें पुनः लोड लागत से बचने के लिए दोनों कार्यों को कॉल करने की आवश्यकता है या क्या मुझे कुछ याद आ रही है? क्या OpenGL को संकेत देने का कोई सस्ता तरीका है कि फ्रेमबफर की सामग्री पूरी तरह से ओवरराइट की जा रही है और इसलिए टाइल मेमोरी में पुनः लोड करने की आवश्यकता नहीं है?

उत्तर

4

प्रलेखन का तात्पर्य है कि एक पूर्णस्क्रीन glClear() कुछ जादुई ध्वज सेट करता है, जो कि मैंने एक ही मुद्दे को डीबग करते समय देखा है। मैं एक अनावश्यक glClear() करने के बारे में चिंता नहीं करता, क्योंकि यह मैं क्या कह सकता हूं से इच्छित उपयोग पैटर्न है।

अद्यतन: आप भी उसी बग का अनुभव कर रहे हैं, जहां मैं रंग और गहराई बफर साफ़ कर रहा था, लेकिन glClear() को कॉल करने से पहले glDepthMask (GL_TRUE) सेट करना भूल गया। इसके परिणामस्वरूप लॉजिकल बफर लोड चेतावनी मिली।

संबंधित मुद्दे