Browse Source

Add support for floating point main callback rates

nightmareci 1 month ago
parent
commit
9e6a6c01e4
2 changed files with 7 additions and 3 deletions
  1. 4 0
      include/SDL3/SDL_hints.h
  2. 3 3
      src/main/generic/SDL_sysmain_callbacks.c

+ 4 - 0
include/SDL3/SDL_hints.h

@@ -2500,6 +2500,10 @@ extern "C" {
  * This defaults to 0, and specifying NULL for the hint's value will restore
  * the default.
  *
+ * This doesn't have to be an integer value. For example, "59.94" won't be
+ * rounded to an integer rate; the digits after the decimal are actually
+ * respected.
+ *
  * This hint can be set anytime.
  *
  * \since This hint is available since SDL 3.2.0.

+ 3 - 3
src/main/generic/SDL_sysmain_callbacks.c

@@ -34,9 +34,9 @@ static void SDLCALL MainCallbackRateHintChanged(void *userdata, const char *name
     if (iterate_after_waitevent) {
         callback_rate_increment = 0;
     } else {
-        const int callback_rate = newValue ? SDL_atoi(newValue) : 0;
-        if (callback_rate > 0) {
-            callback_rate_increment = ((Uint64) 1000000000) / ((Uint64) callback_rate);
+        const double callback_rate = newValue ? SDL_atof(newValue) : 0.0;
+        if (callback_rate > 0.0) {
+            callback_rate_increment = (Uint64) ((double) SDL_NS_PER_SECOND / callback_rate);
         } else {
             callback_rate_increment = 0;
         }