SDL2 - 垂直同步不起作用

SDL2 - Vsync not working

本文关键字:不起作用 同步 垂直 SDL2      更新时间:2023-10-16

我在程序中使用 vsync,在我最小化窗口之前它工作正常。我在创建渲染器时这样做了:

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

这是游戏循环:

while (running)
{
    checkEvent();
    handleKeyboard(timer.getDelta());
    render();
}
它给了我稳定的每秒

60 帧,但当我最小化窗口时,我每秒得到超过 100000 帧。为什么会这样?

可能

只是 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);
    }
}