У меня есть следующий рабочий код, однако я не уверен, что я вызываю 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 прямо после развязывания VAO. Я попробовал называть его в альтернативной позиции, помеченной - сразу после того, как я установил указатель на атрибут. Это, однако, вызвало крах - я предполагаю, что это было потому, что, когда я сделал призыв к розыгрышу, никаких данных не было, потому что я удалил его.
Вещь, которая меня смущает, заключается в том, что она работает, как я ее сейчас. Я беспокоюсь, что: а) я не совсем понимаю, что происходит, когда буфер удаляется, и б) он работает только случайно и может неожиданно сломаться.
Насколько я понимаю, вызов glDeleteBuffers удаляет данные, поэтому не должно быть никаких данных для рисования - но есть. Моя другая мысль заключалась в том, что когда я перевязываю VAO, данные восстанавливаются, хотя это не имеет большого смысла для меня, потому что я не могу объяснить, откуда будут восстанавливаться данные.
Может ли кто-нибудь сообщить мне, правильно ли я использую glDeleteBuffer? и если не там, где это должно быть вызвано (я предполагаю, что нет необходимости в том, чтобы данные были сделаны больше, возможно, в конце программы).