summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Reckase <e.reckase@gmail.com>2010-04-24 03:41:22 +0000
committerScott Draves <spot@draves.org>2015-02-15 12:20:12 -0500
commitbe7f6fd741737db47eaee10aa4064104e20e4ec5 (patch)
tree685f4367a6aacd6dc95fc3dc827f4395701ead80
parent9e40cff938a30a62dd386d5df977ad32d19d96f2 (diff)
downloadpucket-be7f6fd741737db47eaee10aa4064104e20e4ec5.tar.gz
pucket-be7f6fd741737db47eaee10aa4064104e20e4ec5.tar.bz2
pucket-be7f6fd741737db47eaee10aa4064104e20e4ec5.zip
changed flam3_colorhist to take a random context as an argument rather than creating a new one each time. Also optimized the loop to only generate the precalc flags once and create the xform distrib array once.
git-svn-id: https://flam3.googlecode.com/svn/trunk@6 77852712-ef1d-11de-8684-7d64432d61a3
-rw-r--r--src/flam3.c28
-rw-r--r--src/flam3.h2
2 files changed, 12 insertions, 18 deletions
diff --git a/src/flam3.c b/src/flam3.c
index 088eb61..9324d29 100644
--- a/src/flam3.c
+++ b/src/flam3.c
@@ -343,41 +343,34 @@ int flam3_xform_preview(flam3_genome *cp, int xi, double range, int numvals, int
return(0);
}
-int flam3_colorhist(flam3_genome *cp, int num_batches, double *hist) {
+int flam3_colorhist(flam3_genome *cp, int num_batches, randctx *rc, double *hist) {
int lp,plp;
int mycolor;
long int default_isaac_seed = (long int)time(0);
- randctx rc;
unsigned short *xform_distrib;
int sbs = 10000;
double sub_batch[4*10000];
- /* Set up the isaac rng */
- for (lp = 0; lp < RANDSIZ; lp++)
- rc.randrsl[lp] = default_isaac_seed;
-
- irandinit(&rc,1);
-
memset(hist,0,256*sizeof(double));
+ // get into the attractor
+ if (prepare_precalc_flags(cp))
+ return(1);
+
+ xform_distrib = flam3_create_xform_distrib(cp);
+
for (lp=0;lp<num_batches;lp++) {
- sub_batch[0] = flam3_random_isaac_11(&rc);
- sub_batch[1] = flam3_random_isaac_11(&rc);
+ sub_batch[0] = flam3_random_isaac_11(rc);
+ sub_batch[1] = flam3_random_isaac_11(rc);
sub_batch[2] = 0;
sub_batch[3] = 0;
- // get into the attractor
- if (prepare_precalc_flags(cp))
- return(1);
-
- xform_distrib = flam3_create_xform_distrib(cp);
if (xform_distrib==NULL)
return(1);
- flam3_iterate(cp, sbs, 20, sub_batch, xform_distrib, &rc);
- free(xform_distrib);
+ flam3_iterate(cp, sbs, 20, sub_batch, xform_distrib, rc);
// histogram the colors in the sub_batch array
for (plp=0;plp<4*sbs;plp+=4) {
@@ -389,6 +382,7 @@ int flam3_colorhist(flam3_genome *cp, int num_batches, double *hist) {
}
}
+ free(xform_distrib);
for (plp=0;plp<256;plp++)
hist[plp] /= (float)(num_batches*sbs);
diff --git a/src/flam3.h b/src/flam3.h
index 7ccb135..8d75e39 100644
--- a/src/flam3.h
+++ b/src/flam3.h
@@ -570,7 +570,7 @@ flam3_genome *flam3_parse_from_file(FILE *f, char *fn, int default_flag, int *nc
void flam3_add_symmetry(flam3_genome *g, int sym);
void flam3_improve_colors(flam3_genome *g, int ntries, int change_palette, int color_resolution);
-EXPORT int flam3_colorhist(flam3_genome *cp, int num_batches, double *hist);
+EXPORT int flam3_colorhist(flam3_genome *cp, int num_batches, randctx *rc, double *hist);
EXPORT int flam3_estimate_bounding_box(flam3_genome *g, double eps, int nsamples,
double *bmin, double *bmax, randctx *rc);
void flam3_rotate(flam3_genome *g, double angle, int interp_type); /* angle in degrees */