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 1.46 by greg, Mon Oct 21 14:23:36 1991 UTC vs.
Revision 2.3 by greg, Sun Apr 12 10:05:32 1992 UTC

# Line 41 | Line 41 | static int  maxcntr = 0;               /* size of contribution arra
41  
42   marksources()                   /* find and mark source objects */
43   {
44 +        int  foundsource = 0;
45          int  i;
46          register OBJREC  *o, *m;
47          register int  ns;
# Line 93 | Line 94 | marksources()                  /* find and mark source objects */
94                                  source[ns].sflags |= SSKIP;
95                          }
96                  }
97 +                if (!(source[ns].sflags & SSKIP))
98 +                        foundsource++;
99          }
100 <        if (nsources <= 0) {
100 >        if (!foundsource) {
101                  error(WARNING, "no light sources found");
102                  return;
103          }
104          markvirtuals();                 /* find and add virtual sources */
105                                  /* allocate our contribution arrays */
106 <        maxcntr = nsources + MAXSPART*2;        /* start with this many */
106 >        maxcntr = nsources + MAXSPART;  /* start with this many */
107          srccnt = (CONTRIB *)malloc(maxcntr*sizeof(CONTRIB));
108          cntord = (CNTPTR *)malloc(maxcntr*sizeof(CNTPTR));
109 <        if (srccnt == NULL || cntord == NULL)
109 >        if (srccnt == NULL | cntord == NULL)
110                  goto memerr;
111          return;
112   memerr:
# Line 123 | Line 126 | SRCINDEX  *si;                 /* source sample index */
126  
127      rayorigin(sr, r, SHADOW, 1.0);              /* ignore limits */
128  
129 <    while ((d = nextssamp(sr->rorg, sr->rdir, si)) != 0.0) {
129 >    while ((d = nextssamp(sr, si)) != 0.0) {
130          sr->rsrc = si->sn;                      /* remember source */
131          srcp = source + si->sn;
132          if (srcp->sflags & SDISTANT) {
# Line 228 | Line 231 | char  *p;                      /* data for f */
231                                          maxcntr*sizeof(CONTRIB));
232                          cntord = (CNTPTR *)realloc((char *)cntord,
233                                          maxcntr*sizeof(CNTPTR));
234 <                        if (srccnt == NULL || cntord == NULL)
234 >                        if (srccnt == NULL | cntord == NULL)
235                                  error(SYSTEM, "out of memory in direct");
236                  }
237                  cntord[sn].sndx = sn;
# Line 261 | Line 264 | char  *p;                      /* data for f */
264                          l = m;
265                  }
266          }
267 +        if (ncnts == 0)
268 +                return;         /* no contributions! */
269                                                  /* accumulate tail */
270          for (sn = ncnts-1; sn > 0; sn--)
271                  cntord[sn-1].brt += cntord[sn].brt;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines