2015-06-20 72 views
0

我在我的程序中使用了vsync,並且它工作正常,直到我最小化窗口。我這樣做,當我創建的渲染:SDL2 - Vsync不起作用

renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); 

這裏是遊戲循環:

while (running) 
{ 
    checkEvent(); 
    handleKeyboard(timer.getDelta()); 

    render(); 
} 

它給了我每秒穩定的60幀,但我得到每秒時,超過10幀我最小化窗口。爲什麼會發生?

回答

1

可能只是SDL中的一個錯誤。如果你更多地調查了這個問題:閱讀文檔做一些測試,你可以報告錯誤。它很可能很快就會被修復。瑞安和他的同事工作很好。 :)

這就是說。我永遠不會認爲Vsync適用於每個系統。您可能想要添加您自己的幀速率限制系統。依靠硬件來限制幀率是一個壞主意。


編輯: 我用這個在我的遊戲限制幀率:

while (!gameLoop->done) 
{ 
    int start = SDL_GetTicks(); 
    gameLoop->update(); 
    int time = SDL_GetTicks() - start; 
    if (time < 0) continue; // if time is negative, the time probably overflew, so continue asap 

    int sleepTime = gameLoop->millisecondsForFrame - time; 
    if (sleepTime > 0) 
    { 
     SDL_Delay(sleepTime); 
    } 
} 
+0

我應該限制使用SDL_Delay然後幀率? –

+0

是的,檢查我的更新。 –

+2

幀率限制與vsync有關嗎?它甚至不會消除屏幕撕裂,再加上延遲可能超過要求。雖然限制有其用處,但它並不是真正的vsync替代方案。 – keltar