From 47593c038f8d8155cbd1722d641c652a486f76bf Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Fri, 4 Sep 2020 01:54:03 +0200 Subject: [PATCH] added setting video vsync mode when creating renderer Changing the vsync mode after creating the renderer only works for the OpenGL renderer. For all other renderers, it must be set when creating the renderer. This means that changes to the vsync mode settings in the setup menu currently only take effect after restarting the program. --- src/libgame/sdl.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/libgame/sdl.c b/src/libgame/sdl.c index ab914a4e..c7a87297 100644 --- a/src/libgame/sdl.c +++ b/src/libgame/sdl.c @@ -515,6 +515,14 @@ static boolean SDLCreateScreen(boolean fullscreen) #if 1 int renderer_flags = SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE; + + video.vsync_mode = VSYNC_MODE_OFF; + + if (!strEqual(setup.vsync_mode, STR_VSYNC_MODE_OFF)) + { + renderer_flags |= SDL_RENDERER_PRESENTVSYNC; + video.vsync_mode = VSYNC_MODE_NORMAL; + } #else /* If SDL_CreateRenderer() is called from within a VirtualBox Windows VM _without_ enabling 2D/3D acceleration and/or guest additions installed, @@ -587,6 +595,7 @@ static boolean SDLCreateScreen(boolean fullscreen) // SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, setup.window_scaling_quality); + // required for setting adaptive vsync when using OpenGL renderer SDLSetScreenVsyncMode(setup.vsync_mode); sdl_texture_stream = SDL_CreateTexture(sdl_renderer, -- 2.34.1