सक्सेसफुल ग्लिंकप्रोग्राम के बाद, क्या मुझे अपने शेड्स को हटाना / अलग करना चाहिए?


45

मेरे पास एक जुड़ा हुआ कार्यक्रम है, और रक्षात्मक प्रोग्रामिंग के बारे में सोचने के बाद, क्या मुझे इस कार्यक्रम को लिंक करने के लिए उपयोग किए जाने वाले शेड को हटाना और अलग करना चाहिए?

यदि हाँ, तो क्या यह किसी भी संसाधन को मुक्त करने वाला है? या क्या ये shader ऑब्जेक्ट केवल glDeleteProgram कॉल के बाद मुक्त होने जा रहे हैं?

संपादित करें: मैं क्या कर रहा हूँ स्पष्टीकरण के लिए (जो उत्तर के अनुरूप है):

glCreateShader -> glShaderSource -> glCompileShader -> glCreateProgram -> glAttachShader -> glLinkProgram -> glDetachShader -> glDeleteShader -> इस शेडर प्रोग्राम का उपयोग करके ड्रा करें -> और जब मुझे इस शेडर की आवश्यकता नहीं है

जवाबों:


46

हां, आपको हमेशा ऐसा करना चाहिए। मुझे इस बारे में अभी कुछ समय पहले तक पता नहीं चला था, लेकिन glDeleteShaderजब तक इसे अलग नहीं किया जाता है, तब तक एक shader वास्तव में हटाया नहीं जाएगा । इसका उल्लेख मैन पेज के लिए किया गया हैglDetachShader

संपादित करें : लगभग भी shaders को हटाने के बारे में थोड़ा याद किया। हां, आपको ऐसा करना चाहिए क्योंकि यह shader स्रोत और अनलिंकड ऑब्जेक्ट कोड को स्टोर करने के लिए उपयोग की जाने वाली मेमोरी को मुक्त करता है। इस StackOverflow प्रश्न में इसे और अधिक विस्तार से बताया गया है ।


+1 और यह सफाई को भी आसान बनाता है क्योंकि आपके पास ट्रैक और ग्लेडलीट के लिए केवल एक ही वस्तु है।
मैक्सिमस मिनिमस

2

आदेश सही है, लेकिन आपको वास्तव में शेड्स को डिटैच करने की आवश्यकता नहीं है, क्योंकि कॉलिंग glDeleteProgram करता है कि आपके लिए सभी संलग्न शेड्स के साथ और फिर वे स्वचालित रूप से हटा दिए गए हैं (यदि उन्हें glDeleteShader func को हटाने के लिए ध्वजांकित किया गया था)।

संदर्भ: http://www.opengl.org/sdk/docs/man/xhtml/glDeleteProgram.xml


शेडर ऑब्जेक्ट प्रत्येक प्रोग्राम की तुलना में बहुत अधिक मेमोरी लेते हैं। अपने कार्यक्रमों को संकलित करने और अधिक महत्वपूर्ण चीज़ों के लिए अधिक मेमोरी उपलब्ध होने के बाद उन्हें हटाना बेहतर है।
रॉबर्ट रूहानी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.