X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fsdl.c;h=b03f01adab1a1bd3026f53ef1e8e8a234cd35905;hp=a794a153ec85f4adba6e3d73a1abac4224269af8;hb=94b9816442fd27ab02bcef6f5d4aaf6740009fc5;hpb=30eb586d06bc4d1ee7388dced1c20e530292aa93 diff --git a/src/libgame/sdl.c b/src/libgame/sdl.c index a794a153..b03f01ad 100644 --- a/src/libgame/sdl.c +++ b/src/libgame/sdl.c @@ -677,6 +677,8 @@ static boolean SDLCreateScreen(boolean fullscreen) // SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, setup.window_scaling_quality); + SDLSetScreenVsyncMode(setup.vsync_mode); + sdl_texture_stream = SDL_CreateTexture(sdl_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, @@ -1013,6 +1015,21 @@ void SDLSetScreenRenderingMode(char *screen_rendering_mode) #endif } +void SDLSetScreenVsyncMode(char *vsync_mode) +{ +#if defined(TARGET_SDL2) + int interval = + (strEqual(vsync_mode, STR_VSYNC_MODE_NORMAL) ? VSYNC_MODE_NORMAL : + strEqual(vsync_mode, STR_VSYNC_MODE_ADAPTIVE) ? VSYNC_MODE_ADAPTIVE : + VSYNC_MODE_OFF); + int result = SDL_GL_SetSwapInterval(interval); + + // if adaptive vsync requested, but not supported, retry with normal vsync + if (result == -1 && interval == VSYNC_MODE_ADAPTIVE) + SDL_GL_SetSwapInterval(VSYNC_MODE_NORMAL); +#endif +} + void SDLRedrawWindow(void) { UpdateScreen_WithoutFrameDelay(NULL);