0
我做了一些性能測試以及與此想出了:SDL_GL_SwapWindow糟糕的表現
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
for(U32 i=0;i<objectList.length();++i)
{
PC d("draw");
VoxelObject& obj = *objectList[i];
glBindVertexArray(obj.vao);
tmpM = usedView->projection * usedView->transform * obj.transform;
glUniformMatrix4fv(shader.modelViewMatrixLoc, 1, GL_FALSE, tmpM.data());
//glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, typesheet.tbo);
glUniform1i(shader.typesheetLoc, 0);
glDrawArrays(GL_TRIANGLES, 0, VoxelObject::VERTICES_PER_BOX*obj.getNumBoxes());
d.out(); // 2 calls 0.000085s and 0.000043s each
}
PC swap("swap");
SDL_GL_SwapWindow(mainWindow); // 1 call 0.007823s
swap.out();
到SDL_GL_SwapWindow(mainWindow);
呼叫正在比繪製調用更長的200倍!據我的理解,我認爲所有的功能應該做的是交換緩衝區。這意味着交換所花費的時間將根據屏幕大小進行縮放?不,它基於幾何的數量進行縮放......我在網上做了一些搜索,我有雙緩衝啓用和vsync關閉。我很難過。
也許你沒有使用硬件加速的OpenGL實現。使用glGetString獲取OpenGL供應商以找出問題。 –