Browse Source

Moved SDL_rand auto-initialization out of SDL_rand_r

John Kaniarz 10 months ago
parent
commit
f4ee59a1a2
1 changed files with 9 additions and 5 deletions
  1. 9 5
      src/stdlib/SDL_random.c

+ 9 - 5
src/stdlib/SDL_random.c

@@ -23,15 +23,23 @@
 /* This file contains portable random functions for SDL */
 
 static Uint64 SDL_rand_state;
+static SDL_bool SDL_rand_initialized = SDL_FALSE;
 
 void SDL_srand(Uint64 seed)
 {
+    if (!seed) {
+        seed = SDL_GetPerformanceCounter();
+    }
     SDL_rand_state = seed;
+    SDL_rand_initialized = SDL_TRUE;
 }
 
 Uint32 SDL_rand(void)
 {
-	return SDL_rand_r(&SDL_rand_state);
+    if(!SDL_rand_initialized) {
+        SDL_srand(0);
+    }
+    return SDL_rand_r(&SDL_rand_state);
 }
 
 /*
@@ -62,10 +70,6 @@ Uint32 SDL_rand_r(Uint64 *state)
         return 0;
     }
 
-    if (!*state) {
-        *state = SDL_GetPerformanceCounter();
-    }
-
 	// Multiplier from Table 6 of
 	// Steele GL, Vigna S. Computationally easy, spectrally good multipliers
 	// for congruential pseudorandom number generators.