代码之家  ›  专栏  ›  技术社区  ›  Thomas

如何像pygame一样限制sdl2 fps

  •  4
  • Thomas  · 技术社区  · 8 年前

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

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

    而当我计算完时差后通过睡眠时间 SDL_Delay() 使我的编程完全冻结,并显示“无响应”。

    SDL_WaitEvent()

    有没有任何等效于pygame的既不阻止输入也不阻止视频线程

    fpsClock = pygame.time.Clock()
    while(True):
        pygame.display.update()
        fpsClock.tick(60)
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   pabdulin    8 年前

    你查过那个电话了吗 SDL_GL_SetSwapInterval(1)

    您是否在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);
    

    this for example , see also