ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/source.c
(Generate patch)

Comparing ray/src/rt/source.c (file contents):
Revision 2.84 by greg, Fri Nov 15 20:47:42 2024 UTC vs.
Revision 2.86 by greg, Sat Jan 18 03:49:00 2025 UTC

# Line 200 | Line 200 | freesources(void)                      /* free all source structures */
200                  while (nsources--)
201                          freeobscache(&source[nsources]);
202   #endif
203 #ifdef SSKIPOPT
204                sskip_rsi(NULL);
205 #endif
203                  free(source);
204                  source = NULL;
205                  nsources = 0;
# Line 219 | Line 216 | freesources(void)                      /* free all source structures */
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   {
# Line 234 | Line 231 | srcray(                                /* send a ray to a source, return domega */
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))
# Line 451 | Line 448 | direct(                                        /* add direct component */
448                  cntord[sn].brt = sintens(scp->coef);
449                  if (cntord[sn].brt <= 0.0)
450                          continue;
454 #ifdef SSKIPOPT
455                if (ssf_select != NULL && sskip_chk(ssf_select, scp->sno))
456                        scalescolor(scp->coef, r->scorr);
457 #endif
451                  VCOPY(scp->dir, sr.rdir);
452                  copyscolor(sr.rcoef, scp->coef);
453                                                  /* compute potential */
# Line 610 | Line 603 | srcscatter(                    /* compute source scattering into ray */
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];
# Line 642 | Line 636 | srcscatter(                    /* compute source scattering into ray */
636                                  }
637                                                          /* other factors */
638                                  d *= si.dom * r->rot / (4.*PI*nsamps);
645 #ifdef SSKIPOPT
646                                if (ssf_select != NULL && sskip_chk(ssf_select, sr.rsrc))
647                                        d *= r->scorr;
648 #endif
639                                  scalescolor(sr.rcol, d);
640                          } else {
641                                  /* PMAP: Add ambient inscattering from

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines