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