У меня проблема с производительностью в моей игре iOS/Android, где несколько VBO нужно обновлять каждый раз в то время. После профилирования моей игры выясняется, что glDeleteBuffers() занимает до 7 мс на обновление VBO. Это, конечно, приводит к икоте, когда кадры обычно занимают всего 4 мс для рендеринга.glDeleteBuffers медленнее, чем glBufferData
Вот та часть, где я обновить мою 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 говорит сам за себя, я думаю;)
Зачем их удалять, если вы собираетесь их воссоздать? – harold
, потому что они все равно будут разных размеров. Я думал о них как о регулярных массивах. – Brammie