How to cover sdl2 fps like pygame

When I write my OpenGL SDL2 program something like this (using VSync):

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

my cpu load reaches 39% -50% for this one program that actually does nothing

whereas when switching sleep time after calculating the time difference to SDL_Delay() my programming is completely frozen with "not responding".

I do not want to use SDL_WaitEvent() , because my program will show an animation that will work regardless of input events.

is there any pygame equivalent that neither blocks the input nor the video stream

 fpsClock = pygame.time.Clock() while(True): pygame.display.update() fpsClock.tick(60) 
+4
source share
1 answer

Did you SDL_GL_SetSwapInterval(1) that the SDL_GL_SetSwapInterval(1) call was successful? Your FPS should be limited by your refresh rate if your call was successful.

Did you correctly initialize OpenGL in SDL for double buffering? As 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 is not the foundation; there are no high-level features such as frame rate control. However, you must have a frame rate limit with VSync. If there is no restriction, then VSync is not working.

Please see more detailed guides on setting up OpenGL applications in SDL , for example , see also .

+2
source

Source: https://habr.com/ru/post/1272031/


All Articles