2010-01-09 3 views
5

देखा है कि कुछ उदाहरण कोड में है, लेकिन Ive यह इस्तेमाल कभी नहीं किया, जब तक कि im गतिशील नई भिन्न गठन आदि आकार खोलनेक्या मुझे प्रोग्राम के अंत में glDeleteTextures() का उपयोग करना है?

तो मेरी ओएस या कुछ और बनावट स्मृति को मुक्त कराने की देखभाल करता है जब मेरे एप्लिकेशन समाप्त हो जाता है? या क्या मुझे इसे खुद मुक्त करना है?

उत्तर

4

हर दूसरे संसाधन की तरह, अधिकांश ओएस उन्हें मुक्त कर देंगे यदि आप नहीं करते हैं।

आमतौर पर, ऐसा करने का कारण यह सुनिश्चित करना है कि आपका प्रोग्राम चल रहा है, जबकि आप किसी भी संसाधन को रिसाव नहीं करते हैं। उदाहरण के लिए कहें कि आप स्तर लोड करते हैं, अगर आप अपने सभी बनावट को मुक्त नहीं करते हैं क्योंकि आप लोडिंग स्तर को बनाए रखते हैं, जितनी जल्दी या बाद में, आप स्मृति से बाहर हो जाएंगे। यदि आप बाहर निकलने पर साफ करते हैं तो लीक का ट्रैक रखना आसान होता है।

3

एंड्रॉयड GLSurfaceView.Renderer प्रलेखन से:

public abstract void onSurfaceCreated (GL10 gl, EGLConfig config) 

के बाद से: एपीआई स्तर 3 कहा जाता है जब सतह बनाया या निर्मित किया गया है। जब रेंडरिंग थ्रेड शुरू होता है और जब भी ईजीएल संदर्भ खो जाता है तब कॉल किया जाता है। ईजीएल संदर्भ आमतौर पर खो जाएगा जब एंड्रॉइड डिवाइस सोने के बाद जागता है। चूंकि इस विधि को प्रतिपादन की शुरुआत में बुलाया जाता है, साथ ही साथ जब भी ईजीएल संदर्भ खो जाता है, यह विधि संसाधन बनाने के लिए कोड रखने के लिए एक सुविधाजनक स्थान है जिसे प्रतिपादन शुरू होने पर बनाए जाने की आवश्यकता होती है, और यह होना आवश्यक है ईजीएल संदर्भ खो जाने पर पुनर्निर्मित। बनावट संसाधन का एक उदाहरण है जिसे आप यहां बनाना चाहते हैं। ध्यान दें कि जब ईजीएल संदर्भ खो जाता है, तो उस संदर्भ से जुड़े सभी ओपनजीएल संसाधन स्वचालित रूप से हटा दिए जाएंगे। इन खोए गए संसाधनों को मैन्युअल रूप से हटाने के लिए आपको gldeleteTextures जैसे संबंधित "glDelete" विधियों को कॉल करने की आवश्यकता नहीं है।

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