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 |
|
|
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 */ |
197 |
|
/* set shared memory boundary */ |
198 |
|
shm_boundary = strcpy((char *)malloc(16), "SHM_BOUNDARY"); |
199 |
|
} |
200 |
+ |
trace = trace_contrib; /* set up trace call-back */ |
201 |
|
for (i = 0; i < nsources; i++) /* tracing to sources as well */ |
202 |
|
source[i].sflags |= SFOLLOW; |
203 |
|
if (yres > 0) { /* set up flushing & ray counts */ |
281 |
|
thisray.rmax = 0.0; |
282 |
|
rayorigin(&thisray, PRIMARY, NULL, NULL); |
283 |
|
/* pretend we hit surface */ |
284 |
< |
thisray.rt = thisray.rot = 1e-5; |
284 |
> |
thisray.rxt = thisray.rot = 1e-5; |
285 |
|
thisray.rod = 1.0; |
286 |
|
VCOPY(thisray.ron, dir); |
287 |
|
VSUM(thisray.rop, org, dir, 1e-4); |