Browse Source

Fixed refresh interval calculation

Sam Lantinga 9 months ago
parent
commit
44f06b216a
1 changed files with 11 additions and 10 deletions
  1. 11 10
      src/render/SDL_render.c

+ 11 - 10
src/render/SDL_render.c

@@ -918,21 +918,22 @@ static void SDL_CalculateSimulatedVSyncInterval(SDL_Renderer *renderer, SDL_Wind
 {
     SDL_DisplayID displayID = SDL_GetDisplayForWindow(window);
     const SDL_DisplayMode *mode;
-    int num, den;
+    int refresh_num, refresh_den;
 
     if (displayID == 0) {
         displayID = SDL_GetPrimaryDisplay();
     }
     mode = SDL_GetDesktopDisplayMode(displayID);
-    if (mode && mode->refresh_rate_numerator > 0) {
-        num = mode->refresh_rate_numerator;
-        den = mode->refresh_rate_denominator;
+    if (mode && mode->refresh_rate_numerator > 0 && mode->refresh_rate_denominator > 0) {
+        refresh_num = mode->refresh_rate_numerator;
+        refresh_den = mode->refresh_rate_denominator;
     } else {
         /* Pick a good default refresh rate */
-        num = 60;
-        den = 1;
+        refresh_num = 60;
+        refresh_den = 1;
     }
-    renderer->simulate_vsync_interval_ns = (SDL_NS_PER_SECOND * num) / den;
+    /* Flip numerator and denominator to change from framerate to interval */
+    renderer->simulate_vsync_interval_ns = (SDL_NS_PER_SECOND * refresh_den) / refresh_num;
 }
 
 #endif /* !SDL_RENDER_DISABLED */
@@ -1156,10 +1157,10 @@ SDL_Renderer *SDL_CreateSoftwareRenderer(SDL_Surface *surface)
 #if SDL_VIDEO_RENDER_SW
     SDL_Renderer *renderer;
 
-	if (!surface) {
+    if (!surface) {
         SDL_InvalidParamError("surface");
-		return NULL;
-	}
+        return NULL;
+    }
 
     SDL_PropertiesID props = SDL_CreateProperties();
     SDL_SetPointerProperty(props, SDL_PROP_RENDERER_CREATE_SURFACE_POINTER, surface);