glDeleteBuffers медленнее, чем glBufferData
У меня есть небольшая проблема с производительностью в моей игре для iOS / Android, где необходимо периодически обновлять несколько VBO. После профилирования моей игры выясняется, что glDeleteBuffers () занимает до 7 мс на обновление VBO. Это, конечно, приводит к сбоям в работе, когда для рендеринга кадров обычно требуется всего 4 мс.
Вот часть, где я обновляю свой VBO:
Chunk* chunk;
pthread_join(constructionThread, (void**)&chunk);
building = false;
if (vboID)
{
//takes 7 milliseconds
glDeleteBuffers(1, &vboID);
vboID = 0;
}
if (offset)
{
glGenBuffers(1, &vboID);
glBindBuffer(GL_ARRAY_BUFFER, vboID);
//takes about 1-2 milliseconds, which is acceptable
glBufferData(GL_ARRAY_BUFFER, offset * 4, constructionBuffer, GL_STATIC_DRAW);
}
где смещение - это переменная экземпляра, в основном размер нового VBO, который довольно переменный. я думаю, vboID говорит сам за себя;)