added setting video vsync mode when creating renderer
authorHolger Schemel <info@artsoft.org>
Thu, 3 Sep 2020 23:54:03 +0000 (01:54 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 5 Sep 2020 18:38:48 +0000 (20:38 +0200)
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

index ab914a4e17c71778fb10b56c050c58f345b48133..c7a87297821c5fecb4e4c0cdae20f406711fc4a6 100644 (file)
@@ -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,