21 |
|
int ndims = 0; /* number of sampling dimensions */ |
22 |
|
int samplendx = 0; /* index for this sample */ |
23 |
|
|
24 |
< |
static void trace_contrib(RAY *r); /* our trace callback */ |
25 |
< |
void (*trace)() = trace_contrib; |
24 |
> |
void (*trace)() = NULL; /* trace call (NULL before rcinit) */ |
25 |
|
|
26 |
|
int do_irrad = 0; /* compute irradiance? */ |
27 |
|
|
28 |
|
int rand_samp = 1; /* pure Monte Carlo sampling? */ |
29 |
|
|
30 |
|
double dstrsrc = 0.9; /* square source distribution */ |
31 |
< |
double shadthresh = .03; /* shadow threshold */ |
31 |
> |
double shadthresh = 0.; /* shadow threshold */ |
32 |
|
double shadcert = .75; /* shadow certainty */ |
33 |
|
int directrelay = 3; /* number of source relays */ |
34 |
|
int vspretest = 512; /* virtual source pretest density */ |
51 |
|
char *ambfile = NULL; /* ambient file name */ |
52 |
|
COLOR ambval = BLKCOLOR; /* ambient value */ |
53 |
|
int ambvwt = 0; /* initial weight for ambient value */ |
54 |
< |
double ambacc = 0; /* ambient accuracy */ |
54 |
> |
double ambacc = 0.; /* ambient accuracy */ |
55 |
|
int ambres = 256; /* ambient resolution */ |
56 |
|
int ambdiv = 350; /* ambient divisions */ |
57 |
|
int ambssamp = 0; /* ambient super-samples */ |
66 |
|
RNUMBER lastray = 0; /* last ray number sent */ |
67 |
|
RNUMBER lastdone = 0; /* last ray output */ |
68 |
|
|
69 |
+ |
static void trace_contrib(RAY *r); /* our trace callback */ |
70 |
+ |
|
71 |
|
static void mcfree(void *p) { epfree((*(MODCONT *)p).binv); free(p); } |
72 |
|
|
73 |
|
LUTAB modconttab = LU_SINIT(NULL,mcfree); /* modifier lookup table */ |
179 |
|
{ |
180 |
|
if (nchild > 0) /* close children if any */ |
181 |
|
end_children(code != 0); |
182 |
+ |
else if (nchild < 0) |
183 |
+ |
_exit(code); /* avoid flush() in child */ |
184 |
|
exit(code); |
185 |
|
} |
186 |
|
|
199 |
|
/* set shared memory boundary */ |
200 |
|
shm_boundary = strcpy((char *)malloc(16), "SHM_BOUNDARY"); |
201 |
|
} |
202 |
+ |
trace = trace_contrib; /* set up trace call-back */ |
203 |
|
for (i = 0; i < nsources; i++) /* tracing to sources as well */ |
204 |
|
source[i].sflags |= SFOLLOW; |
205 |
|
if (yres > 0) { /* set up flushing & ray counts */ |
283 |
|
thisray.rmax = 0.0; |
284 |
|
rayorigin(&thisray, PRIMARY, NULL, NULL); |
285 |
|
/* pretend we hit surface */ |
286 |
< |
thisray.rt = thisray.rot = 1e-5; |
286 |
> |
thisray.rxt = thisray.rot = 1e-5; |
287 |
|
thisray.rod = 1.0; |
288 |
|
VCOPY(thisray.ron, dir); |
289 |
|
VSUM(thisray.rop, org, dir, 1e-4); |