c++ - 如何像pygame一样限制sdl2 fps

标签 c++ c sdl-2

当我像这样编写我的 SDL2 OpenGL 程序时(使用 VSync):

SDL_GL_SetSwapInterval(1);
while(isRunning)
{
    while(SDL_PollEvent(&e))
    {
        if(e.type == SDL_Quit)
        {
            isRunning = false;
        }
    }
    SDL_GL_SwapWindow(window);
}

对于这个实际上什么都不做的单个程序,我的 CPU 使用率高达 39%-50%

而当我在计算时间差后将 sleep 时间传递给 SDL_Delay() 时,我的程序将完全卡住并出现“无响应”。

我不想使用 SDL_WaitEvent(),因为我的程序将显示无论输入事件如何都会运行的动画。

是否有与 pygame 的等效项,既不阻塞输入也不阻塞视频线程

fpsClock = pygame.time.Clock()
while(True):
    pygame.display.update()
    fpsClock.tick(60)

最佳答案

您是否检查过对 SDL_GL_SetSwapInterval(1) 的调用是否成功?如果您的调用成功,您的 FPS 应该以刷新率为上限。

您是否在 SDL 中正确初始化了 OpenGL 以实现双缓冲?像这样for exmaple :

SDL_Window *window;
SDL_GLContext context;

SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

window = SDL_CreateWindow("OpenGL Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_OPENGL);
if (!window) {
    fprintf(stderr, "Couldn't create window: %s\n", SDL_GetError());
    return;
}

context = SDL_GL_CreateContext(window);
if (!context) {
    fprintf(stderr, "Couldn't create context: %s\n", SDL_GetError());
    return;
}

int r, g, b;
SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &r);
SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &g);
SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &b);

printf("Red size: %d, Green size: %d, Blue size: %d\n", r, g, b);

SDL不是一个框架,没有像帧率控制这样的高级功能。但是,您应该为 VSync 设置帧速率上限。如果没有上限,则可能意味着 VSync 不工作。

请考虑查看有关如何在 SDL 中设置 OpenGL 应用程序的更深入的教程,this for example , see also .

关于c++ - 如何像pygame一样限制sdl2 fps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46359600/

相关文章:

c++ - SDL_Renderer 使用 100% CPU 和 RAM 什么也不做

c++ - 为什么 std::move 不在默认 move 构造函数中将源变量更改为默认值?

c - (~(0)) 将如何在 c 中解释?

c++ - SDL_rect 没有命名类型

c - SDL 2.0 构建错误(重复)

php - 使用php的程序的交互式控制

c++ - 是否有一种简单直接的方法将音频用作程序的输出?

c++ - QT "No such slot"错误

c++ - 乘以 __int64

c - 如何使用指向 C 中结构数组的指针为结构分配内存?