glDeleteBuffers wolniej niż glBufferData
Mam trochę problemów z wydajnością w mojej grze na iOS / Androida, gdzie kilka VBO musi być aktualizowanych co jakiś czas. Po profilowaniu mojej gry okazuje się, że glDeleteBuffers () zajmuje do 7 ms na aktualizację VBO. To oczywiście powoduje czkawkę, gdy renderowanie ramek zajmuje zwykle tylko 4 ms.
Oto część, w której aktualizuję mój 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);
}
gdzie offset jest zmienną instancji jest zasadniczo wielkością nowego VBO, która jest dość zmienna. vboID mówi sam za siebie;