मेरे पास निम्न कार्य कोड है, हालांकि मुझे विश्वास नहीं है कि मैं एक सुरक्षित तरीके से glDeleteBuffers को कॉल कर रहा हूं। व्यवहार में यह काम कर रहा है (अब कम से कम) लेकिन जो मैं पढ़ रहा हूं उससे मुझे नहीं लगता कि इसे काम करना चाहिए।मुझे glDeleteBuffers() कब कॉल करना चाहिए?
GLuint vao_id;
glGenVertexArrays(1, &vao_id);
glBindVertexArray(vao_id);
GLuint VBO;
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
glEnableVertexAttribArray(0);
//Alternate position <<----
//Unbind the VAO
glBindVertexArray(0);
//Current position <<----
glDeleteBuffers(1, &VBO);
मैं वर्तमान में वीएओ को अनबाइंड करने के बाद सीधे glDeleteBuffers को कॉल कर रहा हूं। मैंने विशेषता पॉइंटर सेट करने के तुरंत बाद चिह्नित वैकल्पिक स्थिति में इसे कॉल करने का प्रयास किया है। हालांकि यह एक दुर्घटना का कारण बन गया - मेरा अनुमान यह था क्योंकि जब मैंने ड्रॉ कॉल किया था तो वहां कोई डेटा नहीं खींचा गया था क्योंकि मैंने इसे हटा दिया था।
जो चीज मुझे भ्रमित करती है वह यह है कि यह मेरे पास वर्तमान में काम करता है। मुझे चिंता है कि ए) मुझे समझ में नहीं आता कि बफर हटाए जाने पर क्या होता है और बी) कि यह केवल मौके से काम करता है और अप्रत्याशित रूप से तोड़ सकता है।
जहां तक मैं समझता हूं कि glDeleteBuffers डेटा को हटा देता है इसलिए आकर्षित करने के लिए कोई डेटा नहीं होना चाहिए - लेकिन वहां है। तो मेरा दूसरा विचार यह था कि जब मैं वीएओ को दोबारा बांधता हूं तो डेटा बहाल हो जाता है, हालांकि इससे मुझे ज्यादा समझ नहीं आती है क्योंकि मैं यह नहीं कह सकता कि डेटा कहां से बहाल किया जाएगा।
क्या कोई मुझे बता सकता है कि क्या मैं glDeleteBuffer का सही उपयोग कर रहा हूं? और यदि नहीं, जहां इसे कहा जाना चाहिए (मुझे अनुमान है कि डेटा के लिए संभवतः प्रोग्राम के अंत में, और अधिक खींचना नहीं है)।