glDeleteBuffers langsamer als glBufferData

Ich habe ein Leistungsproblem in meinem iOS- / Android-Spiel, bei dem ab und zu mehrere VBOs aktualisiert werden müssen. Nachdem ich mein Spiel profiliert habe, stellt sich heraus, dass glDeleteBuffers () bis zu 7 ms pro VBO-Update benötigt. Dies führt natürlich zu einem Schluckauf, wenn das Rendern von Frames normalerweise nur 4 ms dauert.

Hier ist der Teil, in dem ich mein VBO aktualisiere:

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);
}

Wobei offset eine Instanzvariable ist, ist im Grunde genommen die Größe des neuen VBO, die ziemlich variabel ist. vboID spricht für sich, denke ich;)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage