2015-06-20 47 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