2011-02-22 17 views
5

मैं एक फ्रेम बफर ऑब्जेक्ट का उपयोग करके फ्रैंच शेडर के साथ बनावट करने के लिए फ्रेम बफर ऑब्जेक्ट का उपयोग करके एक वर्ग लिखने की कोशिश कर रहा हूं, फिर उस बनावट को एक टुकड़े टुकड़े आदि के साथ एक और बनावट में प्रस्तुत करें।glDeleteTextures बनावट को हटा नहीं रहा

मैं अभी मेमोरी रिसाव से निपटने की कोशिश कर रहा हूं, जहां मैं अपनी खिड़की का आकार बदलता हूं और बनावट का उपयोग/पुन: आवंटित करता हूं, बनावट का उपयोग ठीक से नहीं किया जा रहा है। जब मैं करने की कोशिश

//Allocate first texture 
glGenTextures(1, &texIds[0]); 
glBindTexture(GL_TEXTURE_2D, texIds[0]); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, screenX, screenY, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL); 

//Allocate second texture 
glGenTextures(1, &texIds[1]); 
glBindTexture(GL_TEXTURE_2D, texIds[1]); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, screenX, screenY, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL); 

//Try to free first texture -- ALWAYS FAILS 
glDeleteTextures(1, &texIds[0]); 
//Try to free second texture 
glDeleteTextures(1, &texIds[1]); 

जब मैं gDEBugger के साथ इस चलाने के लिए, यह मुझसे कहता है:

कोड स्निपेट है "1 चेतावनी:।: डिबग कार्यक्रम एक बनावट जो मौजूद नहीं है को नष्ट बनावट नाम" texIds हटाएं [0]। (कारण यह है कि मेरे पास अभी एक सरणी में है क्योंकि मैं उन्हें एक ही समय में बनाने और मुक्त करने के लिए उपयोग करता था, हालांकि जब आप एक बार में 2 बनावट मुक्त करते हैं, तो यह चुपचाप एक में विफल हो जाएगा और दूसरे के साथ जारी रहेगा)।

यदि मैं texIds नहीं बनाता [1], तो मैं texIds [0] मुक्त कर सकता हूं, लेकिन जैसे ही मैं दूसरा बनावट बनाउंगा, मैं अब अपने पहले बनावट को मुक्त नहीं कर सकता। कोई विचार?

+0

कि स्निपेट मेरे लिए काम करता है जब मैं texIds को 'ग्लूंट टेक्साइड्स [2];' तुरंत बताता हूं। शायद मुद्दा कहीं और है? – jakev

+0

@ 6NSString अजीब। glGetError() 0 देता है, लेकिन जीडीईबगर मुझे बताता है (और मुझे दिखाता है, अगर मैं बनावट दर्शक में देखता हूं) कि बाहरी बनावट बनायी जा रही है। मैं ओएसएक्स 10.6 चला रहा हूं, अगर यह बिल्कुल मदद करता है। मैं ऐसे प्रोग्राम को बनाने का भी प्रयास करूंगा जिसमें इस कोड को _only_ है। – staticfloat

+1

काफी असंबद्ध टिप्पणी: एक बनावट का आकार बदलने के लिए आपको पूरे बनावट ऑब्जेक्ट को हटाने और पुन: उत्पन्न करने की आवश्यकता नहीं है, बस नए आकार के साथ 'glTexImage2D' को कॉल करें। –

उत्तर

1

शायद त्रुटि texIds सरणी में है। क्या यह ग्लूंट की सरणी है?

आप गलती से इसे शब्द की सरणी के रूप में घोषित कर सकते हैं, इस प्रकार [1] तत्व के लिए बनावट उत्पन्न करते समय, तत्व [0] से लिया गया पॉइंटर टूटा हुआ है।

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