我有一個關於修復FPS而不使用VSYNC的快速問題。想寫沒有VSYNC的固定幀率繪製循環
我目前有一個繪製循環,計算兩次繪製之間的時間, 並減去繪製試圖和穩定幀率所需的時間。
這就是我現在所擁有的:
static clock_t dt = clock();
static clock_t startDraw;
static clock_t endDraw;
while (_running)
{
update();
// Draw after desired elapsed time
if (clock() - dt >= _timestep)
{
startDraw = clock();
draw();
_window->SwapBuffer();
endDraw = clock();
dt = clock() - (endDraw- startDraw);
}
}
_timeStep目前16代表60fps的,但我可能要稍後就改變以30fps的。
沒有VSYNC這個波動在40~62fps之間,所以我不知道這種方法是錯誤的,或者如果我忽略了一些東西。
我的目標是爲VSYNC切換,所以我真的想要添加此功能。
注:我使用OpenGL進行渲染,最多OpenGL_2.0。
嗯,我主要關心的是cpu使用情況。我的目標是通過NDK添加對Android的支持。我目前正在使用SwapBuffer的雙緩衝。 – redsting
你可以考慮的一件事是在draw()之前做SwapBuffer。這樣,你的顯示器將首先刷新(所以你的計時代碼不會產生draw()的代價)。這會給你稍微更穩定的刷新率。唯一需要注意的是,您的屏幕刷新總是會落後1幀,但是在正常的30fps或60fps應用程序中應該不會有太大影響。 – Skyd