| 52 |
|
int ns; |
| 53 |
|
/* call us only once! */ |
| 54 |
|
if (nsources) |
| 55 |
< |
error(CONSISTENCY, "Multiple calls to marksources!"); |
| 55 |
> |
error(CONSISTENCY, "multiple calls to marksources!"); |
| 56 |
|
/* initialize dispatch table */ |
| 57 |
|
initstypes(); |
| 58 |
|
/* find direct sources */ |
| 150 |
|
int ns; |
| 151 |
|
/* call us only once! */ |
| 152 |
|
if (nsources) |
| 153 |
< |
error(CONSISTENCY, "Multiple calls to distantsources!"); |
| 153 |
> |
error(CONSISTENCY, "multiple calls to distantsources!"); |
| 154 |
|
/* initialize dispatch table */ |
| 155 |
|
initstypes(); |
| 156 |
|
/* sources needed for sourcehit() */ |
| 216 |
|
|
| 217 |
|
|
| 218 |
|
int |
| 219 |
< |
srcray( /* send a ray to a source, return domega */ |
| 220 |
< |
RAY *sr, /* returned source ray */ |
| 221 |
< |
RAY *r, /* ray which hit object */ |
| 219 |
> |
srcray( /* aim a ray at a source, return domega */ |
| 220 |
> |
RAY *sr, /* prepared source ray */ |
| 221 |
> |
RAY *r, /* originating ray (or NULL) */ |
| 222 |
|
SRCINDEX *si /* source sample index */ |
| 223 |
|
) |
| 224 |
|
{ |
| 231 |
|
sr->rmax = 0.0; |
| 232 |
|
|
| 233 |
|
while ((d = nextssamp(sr, si)) != 0.0) { |
| 234 |
< |
sr->rsrc = si->sn; /* remember source */ |
| 234 |
> |
sr->rsrc = si->sn; /* remember source */ |
| 235 |
|
srcp = source + si->sn; |
| 236 |
|
if (srcp->sflags & SDISTANT) { |
| 237 |
|
if (srcp->sflags & SSPOT && spotout(sr, srcp->sl.s)) |
| 561 |
|
RAY *r |
| 562 |
|
) |
| 563 |
|
{ |
| 564 |
< |
int oldsampndx; |
| 564 |
> |
unsigned long oldsampndx; |
| 565 |
|
int nsamps; |
| 566 |
|
RAY sr; |
| 567 |
|
SRCINDEX si; |
| 583 |
|
nsamps = MAXSSAMP; |
| 584 |
|
#endif |
| 585 |
|
oldsampndx = samplendx; |
| 586 |
< |
samplendx = random()&0x7fff; /* randomize */ |
| 586 |
> |
samplendx = random()&0x7ffff; /* randomize */ |
| 587 |
|
for (i = volumePhotonMapping ? 1 : r->slights[0]; i > 0; i--) { |
| 588 |
|
/* for each source OR once if volume photon map enabled */ |
| 589 |
|
for (j = 0; j < nsamps; j++) { /* for each sample position */ |
| 603 |
|
sr.rorg[2] = r->rorg[2] + r->rdir[2]*t; |
| 604 |
|
|
| 605 |
|
if (!volumePhotonMapping) { |
| 606 |
< |
if (srcskip(r->slights[i], r)) |
| 606 |
> |
sr.parent = r; /* hack for preemptive test */ |
| 607 |
> |
if (srcskip(r->slights[i], &sr)) |
| 608 |
|
continue; |
| 609 |
|
initsrcindex(&si); /* sample ray to this source */ |
| 610 |
|
si.sn = r->slights[i]; |