Merge branch 'master' into blender2.8
[blender.git] / source / blender / blenlib / intern / rand.c
index 23905be4ced23d39189a5d147bd14d9fadc5f5df..c85b471fb2de85455bb5abab5cb1464e7a708199 100644 (file)
@@ -265,27 +265,16 @@ void BLI_rng_skip(RNG *rng, int n)
 
 /***/
 
-/* initialize with some non-zero seed */
-static RNG theBLI_rng = {611330372042337130};
-
-void BLI_srandom(unsigned int seed)
-{
-       BLI_rng_srandom(&theBLI_rng, seed);
-}
-
-int BLI_rand(void)
+/* fill an array with random numbers */
+void BLI_array_frand(float *ar, int count, unsigned int seed)
 {
-       return BLI_rng_get_int(&theBLI_rng);
-}
+       RNG rng;
 
-float BLI_frand(void)
-{
-       return BLI_rng_get_float(&theBLI_rng);
-}
+       BLI_rng_srandom(&rng, seed);
 
-void BLI_frand_unit_v3(float v[3])
-{
-       BLI_rng_get_float_unit_v3(&theBLI_rng, v);
+       for (int i = 0; i < count; i++) {
+               ar[i] = BLI_rng_get_float(&rng);
+       }
 }
 
 float BLI_hash_frand(unsigned int seed)
@@ -386,6 +375,8 @@ void BLI_halton_1D(unsigned int prime, double offset, int n, double *r)
 {
        const double invprime = 1.0 / (double)prime;
 
+       *r = 0.0;
+
        for (int s = 0; s < n; s++) {
                *r = halton_ex(invprime, &offset);
        }
@@ -395,6 +386,8 @@ void BLI_halton_2D(unsigned int prime[2], double offset[2], int n, double *r)
 {
        const double invprimes[2] = {1.0 / (double)prime[0], 1.0 / (double)prime[1]};
 
+       r[0] = r[1] = 0.0;
+
        for (int s = 0; s < n; s++) {
                for (int i = 0; i < 2; i++) {
                        r[i] = halton_ex(invprimes[i], &offset[i]);
@@ -406,6 +399,8 @@ void BLI_halton_3D(unsigned int prime[3], double offset[3], int n, double *r)
 {
        const double invprimes[3] = {1.0 / (double)prime[0], 1.0 / (double)prime[1], 1.0 / (double)prime[2]};
 
+       r[0] = r[1] = r[2] = 0.0;
+
        for (int s = 0; s < n; s++) {
                for (int i = 0; i < 3; i++) {
                        r[i] = halton_ex(invprimes[i], &offset[i]);