diff --git a/src/stdlib/SDL_random.c b/src/stdlib/SDL_random.c index 0102a7a088..4ac7401a91 100644 --- a/src/stdlib/SDL_random.c +++ b/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.