SDL2 - 垂直同步不工作
SDL2 - Vsync not working
我在我的程序中使用了 vsync,在我最小化 window 之前它工作正常。我在创建渲染器时这样做了:
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
这是游戏循环:
while (running)
{
checkEvent();
handleKeyboard(timer.getDelta());
render();
}
它给了我稳定的每秒 60 帧,但是当我最小化 window 时,我每秒得到超过 100000 帧。为什么会这样?
可能只是 SDL 中的一个错误。如果您对问题进行了更多调查:阅读文档并进行一些测试,您可以报告错误。它可能很快就会被修复。 Ryan 和同事们工作得很好。 :)
话虽这么说。我永远不会假设 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);
}
}
我在我的程序中使用了 vsync,在我最小化 window 之前它工作正常。我在创建渲染器时这样做了:
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
这是游戏循环:
while (running)
{
checkEvent();
handleKeyboard(timer.getDelta());
render();
}
它给了我稳定的每秒 60 帧,但是当我最小化 window 时,我每秒得到超过 100000 帧。为什么会这样?
可能只是 SDL 中的一个错误。如果您对问题进行了更多调查:阅读文档并进行一些测试,您可以报告错误。它可能很快就会被修复。 Ryan 和同事们工作得很好。 :)
话虽这么说。我永远不会假设 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);
}
}