--- ray/src/rt/raycalls.c 2005/06/14 02:46:30 2.13 +++ ray/src/rt/raycalls.c 2011/02/25 06:51:50 2.20 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: raycalls.c,v 2.13 2005/06/14 02:46:30 greg Exp $"; +static const char RCSid[] = "$Id: raycalls.c,v 2.20 2011/02/25 06:51:50 greg Exp $"; #endif /* * raycalls.c - interface for running Radiance rendering as a library @@ -90,9 +90,11 @@ static const char RCSid[] = "$Id: raycalls.c,v 2.13 20 */ #include +#include #include "ray.h" #include "source.h" +#include "bsdf.h" #include "ambient.h" #include "otypes.h" #include "random.h" @@ -139,7 +141,7 @@ double specjitter = 1.; /* specular sampling jitter * int backvis = 1; /* back face visibility */ int maxdepth = 8; /* maximum recursion depth */ -double minweight = 2e-3; /* minimum ray weight */ +double minweight = 5e-4; /* minimum ray weight */ char *ambfile = NULL; /* ambient file name */ COLOR ambval = BLKCOLOR; /* ambient value */ @@ -153,7 +155,7 @@ char *amblist[AMBLLEN+1]; /* ambient include/exclude int ambincl = -1; /* include == 1, exclude == 0 */ -extern void +void ray_init( /* initialize ray-tracing calculation */ char *otnm ) @@ -164,7 +166,13 @@ ray_init( /* initialize ray-tracing calculation */ if (ofun[OBJ_SPHERE].funp == o_default) initotypes(); /* initialize urand */ - initurand(2048); + if (rand_samp) { + srandom((long)time(0)); + initurand(0); + } else { + srandom(0L); + initurand(2048); + } /* read scene octree */ readoct(octname = otnm, ~(IO_FILES|IO_INFO), &thescene, NULL); nsceneobjs = nobjects; @@ -175,18 +183,18 @@ ray_init( /* initialize ray-tracing calculation */ /* ready to go... */ } -extern void +void ray_trace( /* trace a primary ray */ RAY *r ) { rayorigin(r, PRIMARY, NULL, NULL); - samplendx = rand_samp ? random() : samplendx+1; + samplendx++; rayvalue(r); /* assumes origin and direction are set */ } -extern void +void ray_done( /* free ray-tracing data */ int freall ) @@ -200,21 +208,22 @@ ray_done( /* free ray-tracing data */ octdone(); thescene.cutree = EMPTY; octname = NULL; + retainfonts = 0; if (freall) { - retainfonts = 0; freefont(NULL); freedata(NULL); + SDfreeCache(NULL); initurand(0); } if (nobjects > 0) { sprintf(errmsg, "%ld objects left after call to ray_done()", - nobjects); + (long)nobjects); error(WARNING, errmsg); } } -extern void +void ray_save( /* save current parameter settings */ RAYPARAMS *rp ) @@ -265,7 +274,7 @@ ray_save( /* save current parameter settings */ } -extern void +void ray_restore( /* restore parameter settings */ RAYPARAMS *rp ) @@ -333,7 +342,7 @@ ray_restore( /* restore parameter settings */ } -extern void +void ray_defaults( /* get default parameter values */ RAYPARAMS *rp )