added setting video vsync mode when creating renderer
[rocksndiamonds.git] / src / libgame / sdl.c
index e561b177579961dea8066def3053a9cd2f284368..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,
@@ -876,7 +885,16 @@ void SDLSetScreenVsyncMode(char *vsync_mode)
 
   // if adaptive vsync requested, but not supported, retry with normal vsync
   if (result == -1 && interval == VSYNC_MODE_ADAPTIVE)
-    SDL_GL_SetSwapInterval(VSYNC_MODE_NORMAL);
+  {
+    interval = VSYNC_MODE_NORMAL;
+
+    result = SDL_GL_SetSwapInterval(interval);
+  }
+
+  if (result == -1)
+    interval = VSYNC_MODE_OFF;
+
+  video.vsync_mode = interval;
 }
 
 void SDLRedrawWindow(void)