diff options
Diffstat (limited to 'src/modules/stars')
| -rw-r--r-- | src/modules/stars/stars.c | 18 | 
1 files changed, 10 insertions, 8 deletions
diff --git a/src/modules/stars/stars.c b/src/modules/stars/stars.c index 21ae7f5..5506559 100644 --- a/src/modules/stars/stars.c +++ b/src/modules/stars/stars.c @@ -32,6 +32,7 @@ typedef struct stars_context_t {  	float		offset_x;  	float		offset_y;  	float		offset_angle; +	unsigned	seed;  } stars_context_t;  typedef struct stars_setup_t { @@ -44,8 +45,8 @@ static stars_setup_t stars_default_setup = {  }; -float get_random_unit_coord() { -	return (((float)rand()/(float)RAND_MAX)*2.0)-1.0; +float get_random_unit_coord(unsigned *seed) { +	return (((float)rand_r(seed)/(float)RAND_MAX)*2.0)-1.0;  } @@ -63,6 +64,7 @@ static void * stars_create_context(unsigned seed, unsigned ticks, unsigned n_cpu  		return NULL;  	ctxt->points = NULL; +	ctxt->seed = seed;  	ctxt->rot_adj = ((stars_setup_t *)setup)->rot_adj;  	ctxt->rot_rate = 0.00;  	ctxt->rot_angle = 0; @@ -72,12 +74,12 @@ static void * stars_create_context(unsigned seed, unsigned ticks, unsigned n_cpu  	//add a bunch of points  	for(z=0.01; z<1; z=z+0.01) { -		for(int i=0; i<rand()%16; i++){ +		for(int i=0; i<rand_r(&ctxt->seed)%16; i++){  			p_ptr = malloc(sizeof(struct points));  			if (!p_ptr)  				return NULL; -			p_ptr->x = get_random_unit_coord(); -			p_ptr->y = get_random_unit_coord(); +			p_ptr->x = get_random_unit_coord(&ctxt->seed); +			p_ptr->y = get_random_unit_coord(&ctxt->seed);  			p_ptr->z = z;  			p_ptr->next = ctxt->points;  			ctxt->points = p_ptr; @@ -185,12 +187,12 @@ static void stars_render_fragment(void *context, unsigned ticks, unsigned cpu, t  	}  	// add stars at horizon -	for(int i=0; i<rand()%16; i++){ +	for(int i=0; i<rand_r(&ctxt->seed)%16; i++){  		tmp_ptr = malloc(sizeof(struct points));  		if (!tmp_ptr)  			break; -		tmp_ptr->x = get_random_unit_coord(); -		tmp_ptr->y = get_random_unit_coord(); +		tmp_ptr->x = get_random_unit_coord(&ctxt->seed); +		tmp_ptr->y = get_random_unit_coord(&ctxt->seed);  		tmp_ptr->z = 0.01;  		tmp_ptr->next = ctxt->points;  		ctxt->points = tmp_ptr;  | 
