我在iOS/Android遊戲中遇到了一些性能問題,其中幾個VBO必須每隔一段時間更新一次。在分析我的遊戲後,事實證明glDeleteBuffers()每VBO更新需要長達7ms。當幀通常只需要4 ms渲染時,這當然會導致打嗝。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);
}
其中offset是一個實例變量基本上是新的VBO,這是相當變量的大小。我猜是vBID自己說的;)
爲什麼要刪除它們,如果你只是想重新創建它們? – harold
,因爲它們會變成不同的尺寸。我認爲它們是普通數組。 – Brammie