2010-02-06 2 views
3

Я создаю массивы вершин на лету на каждом рендере, и я хочу удалить массивы впоследствии. glDrawArrays немедленно скопирует массивы вершин на сервер? Следовательно, безопасно ли удалять массивы вершин после вызова glDrawArrays?Могу ли я удалить вершинные массивы OpenGL после вызова glDrawArrays?

float * vp = GetVertices(); // Regenerated on each render 
glVertexPointer(3, GL_FLOAT, 3 * sizeof(float), vp); 
glDrawArrays(GL_TRIANGLES, 0, nVertices); 
delete[] vp; // Can I do this? 

В противном случае, как определить, когда можно безопасно удалить массивы вершин?

+1

Для удаления массива требуется синтаксис: 'delete [] vp;' где 'vp' является указателем на первый элемент массива. – dirkgently

+0

@dirkgently К сожалению. Спасибо. –

+2

О несвязанной ноте - использование массивов вершин требует шунтирования данных до памяти графической карты каждый раз. Для более эффективного подхода взгляните на объекты буфера Vertex http://www.songho.ca/opengl/gl_vbo.html – zebrabox

ответ

8

Да, это скопировано немедленно, поэтому, как только вы выполнили вызов, вы можете делать все, что хотите, с помощью массива.

Кроме того, как показано на рисунке, вам необходимо использовать delete[] vp для удаления массива.

2

Да, вы можете удалить массив вершин после вызова glDrawArrays. Но opengl не будет хранить данные вершин в его памяти. Он просто будет использовать массив вершин и опирается на буфер кадра. Итак, в следующий раз, если вы хотите нарисовать одну и ту же вершину, вам нужно снова предоставить массив вершин glDrawArrays.

 Смежные вопросы

  • Нет связанных вопросов^_^