From 1e461f6cc82cb8c30027b120a8b07693fb32edfd Mon Sep 17 00:00:00 2001 From: Vito Caputo Date: Wed, 20 Jul 2022 17:46:43 -0700 Subject: libs/din: pass seed to din_new() also update call sites in modules/{meta2d,swab} accordingly --- src/libs/din/din.c | 20 +++++++++++--------- src/libs/din/din.h | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) (limited to 'src/libs/din') diff --git a/src/libs/din/din.c b/src/libs/din/din.c index c0bac93..4290d41 100644 --- a/src/libs/din/din.c +++ b/src/libs/din/din.c @@ -8,16 +8,17 @@ #include "v3f.h" typedef struct din_t { - int width, height, depth; - int W_x_H; - v3f_t grid[]; + int width, height, depth; + unsigned seed; + int W_x_H; + v3f_t grid[]; } din_t; /* return random number between -1 and +1 */ -static inline float randf(void) +static inline float randf(unsigned *seed) { - return 2.f / RAND_MAX * rand() - 1.f; + return 2.f / RAND_MAX * rand_r(seed) - 1.f; } @@ -30,9 +31,9 @@ void din_randomize(din_t *din) for (x = 0; x < din->width; x++) { v3f_t r; - r.x = randf(); - r.y = randf(); - r.z = randf(); + r.x = randf(&din->seed); + r.y = randf(&din->seed); + r.z = randf(&din->seed); din->grid[z * din->W_x_H + y * din->width + x] = v3f_normalize(&r); } @@ -41,7 +42,7 @@ void din_randomize(din_t *din) } -din_t * din_new(int width, int height, int depth) +din_t * din_new(int width, int height, int depth, unsigned seed) { din_t *din; @@ -56,6 +57,7 @@ din_t * din_new(int width, int height, int depth) din->width = width; din->height = height; din->depth = depth; + din->seed = seed; /* premultiply this since we do it a lot in addressing din->grid[] */ din->W_x_H = width * height; diff --git a/src/libs/din/din.h b/src/libs/din/din.h index baa3ebb..97823b6 100644 --- a/src/libs/din/din.h +++ b/src/libs/din/din.h @@ -4,7 +4,7 @@ typedef struct din_t din_t; typedef struct v3f_t v3f_t; -din_t * din_new(int width, int height, int depth); +din_t * din_new(int width, int height, int depth, unsigned seed); void din_free(din_t *din); void din_randomize(din_t *din); float din(din_t *din, v3f_t *coordinate); -- cgit v1.2.1