From afb4b65167165613f177a531bd3d4dcb3649c1c6 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 15 Apr 2013 23:12:40 +0000 Subject: Random number generator: replace a bunch of usage of the global random number generator with a local one. It's not thread safe and will not give repeatable results, so in most cases it should not be used. Also fixes #34992 where the noise texture of a displacement modifier was not properly random in opengl animation render, because the seed got reset to a fixed value by an unrelated function while for final render it changed each frame. --- source/blender/blenlib/BLI_rand.h | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) (limited to 'source/blender/blenlib/BLI_rand.h') diff --git a/source/blender/blenlib/BLI_rand.h b/source/blender/blenlib/BLI_rand.h index 3bc9a3bdb32..378beff3aa0 100644 --- a/source/blender/blenlib/BLI_rand.h +++ b/source/blender/blenlib/BLI_rand.h @@ -33,14 +33,15 @@ * \brief Random number functions. */ -/** RNG is just an abstract random number generator - * type that avoids using globals, otherwise identical - * to BLI_rand functions below. +/* RNG is an abstract random number generator type that avoids using globals. + * Always use this instead of the global RNG unless you have a good reason, + * the global RNG is not thread safe and will not give repeatable results. */ struct RNG; typedef struct RNG RNG; struct RNG *BLI_rng_new(unsigned int seed); +struct RNG *BLI_rng_new_srandom(unsigned int seed); void BLI_rng_free(struct RNG *rng); void BLI_rng_seed(struct RNG *rng, unsigned int seed); @@ -53,27 +54,17 @@ void BLI_rng_shuffle_array(struct RNG *rng, void *data, int elemSize, int /** Note that skipping is as slow as generating n numbers! */ void BLI_rng_skip(struct RNG *rng, int n); -/** Seed the random number generator */ -void BLI_srand(unsigned int seed); - -/** Better seed for the random number generator, using noise.c hash[] */ +/** Seed for the random number generator, using noise.c hash[] */ void BLI_srandom(unsigned int seed); /** Return a pseudo-random number N where 0<=N<(2^31) */ int BLI_rand(void); -/** Return a pseudo-random number N where 0.0<=N<1.0 */ -double BLI_drand(void); - /** Return a pseudo-random number N where 0.0f<=N<1.0f */ float BLI_frand(void); -/** Fills a block of memory starting at \a addr - * and extending \a len bytes with pseudo-random - * contents. This routine does not use nor modify - * the state of the BLI random number generator. - */ -void BLI_fillrand(void *addr, int len); +/** Return a pseudo-random (hash) float from an integer value */ +float BLI_hash_frand(unsigned int seed); /** Shuffle an array randomly using the given seed. * contents. This routine does not use nor modify -- cgit v1.2.3