c++ - SDL2 - 垂直同步不工作

标签 c++ sdl-2

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

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

这是游戏循环:

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

    render();
}

它为我提供了稳定的每秒 60 帧,但当我最小化窗口时,我每秒获得超过 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);
    }
}

关于c++ - SDL2 - 垂直同步不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30953858/

相关文章:

c - 在 SDL2 C 中使用 for 循环显示矩形

c# - 将套接字服务器从 Node.js 移植到 C#

c++ - 生成 url 的唯一哈希键

c++ - 模板中显式参数的转换

c++ - 带有 OpenGL 纹理的 SDL2 显示不正确

c - 我应该在初始化失败后使用 SDL_Quit() 吗?

c++ - 多属性排序是反转元素

C++文本分隔和计数单词

c - 如何在 SDL 2.0 绘制点、线或矩形中指定 "width"或 "point size"

c++ - SDL2 + Win32 API 菜单栏单击事件不起作用