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

Comparing ray/src/rt/srcsupp.c (file contents):
Revision 2.8 by greg, Tue Nov 7 12:40:30 1995 UTC vs.
Revision 2.13 by greg, Wed Dec 31 02:03:08 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1995 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char       RCSid[] = "$Id$";
3   #endif
6
4   /*
5   *  Support routines for source objects and materials
6 + *
7 + *  External symbols declared in source.h
8   */
9  
10 + #include "copyright.h"
11 +
12   #include  "ray.h"
13  
14   #include  "otypes.h"
# Line 18 | Line 19 | static char SCCSid[] = "$SunId$ LBL";
19  
20   #include  "face.h"
21  
22 < #define SRCINC          4               /* realloc increment for array */
22 > #define SRCINC          8               /* realloc increment for array */
23  
24   SRCREC  *source = NULL;                 /* our list of sources */
25   int  nsources = 0;                      /* the number of sources */
# Line 26 | Line 27 | int  nsources = 0;                     /* the number of sources */
27   SRCFUNC  sfun[NUMOTYPE];                /* source dispatch table */
28  
29  
30 + void
31   initstypes()                    /* initialize source dispatch table */
32   {
33          extern VSMATERIAL  mirror_vs, direct1_vs, direct2_vs;
32        extern int  fsetsrc(), ssetsrc(), sphsetsrc(), cylsetsrc(), rsetsrc();
33        extern int  nopart(), flatpart(), cylpart();
34        extern double  fgetplaneq(), rgetplaneq();
35        extern double  fgetmaxdisk(), rgetmaxdisk();
34          static SOBJECT  fsobj = {fsetsrc, flatpart, fgetplaneq, fgetmaxdisk};
35          static SOBJECT  ssobj = {ssetsrc, nopart};
36          static SOBJECT  sphsobj = {sphsetsrc, nopart};
# Line 56 | Line 54 | newsource()                    /* allocate new source in our array */
54          if (nsources == 0)
55                  source = (SRCREC *)malloc(SRCINC*sizeof(SRCREC));
56          else if (nsources%SRCINC == 0)
57 <                source = (SRCREC *)realloc((char *)source,
57 >                source = (SRCREC *)realloc((void *)source,
58                                  (unsigned)(nsources+SRCINC)*sizeof(SRCREC));
59          if (source == NULL)
60                  return(-1);
61          source[nsources].sflags = 0;
62 <        source[nsources].nhits = 1;
63 <        source[nsources].ntests = 2;    /* initial hit probability = 1/2 */
62 >        source[nsources].nhits = 0;
63 >        source[nsources].ntests = 1;    /* initial hit probability = 0 */
64 > #if SHADCACHE
65 >        source[nsources].obscache = NULL;
66 > #endif
67          return(nsources++);
68   }
69  
70  
71 + void
72   setflatss(src)                          /* set sampling for a flat source */
73   register SRCREC  *src;
74   {
# Line 86 | Line 88 | register SRCREC  *src;
88   }
89  
90  
91 + void
92   fsetsrc(src, so)                        /* set a face as a source */
93   register SRCREC  *src;
94   OBJREC  *so;
# Line 129 | Line 132 | OBJREC  *so;
132   }
133  
134  
135 + void
136   ssetsrc(src, so)                        /* set a source as a source */
137   register SRCREC  *src;
138   register OBJREC  *so;
# Line 155 | Line 159 | register OBJREC  *so;
159   }
160  
161  
162 + void
163   sphsetsrc(src, so)                      /* set a sphere as a source */
164   register SRCREC  *src;
165   register OBJREC  *so;
# Line 177 | Line 182 | register OBJREC  *so;
182   }
183  
184  
185 + void
186   rsetsrc(src, so)                        /* set a ring (disk) as a source */
187   register SRCREC  *src;
188   OBJREC  *so;
# Line 198 | Line 204 | OBJREC  *so;
204   }
205  
206  
207 + void
208   cylsetsrc(src, so)                      /* set a cylinder as a source */
209   register SRCREC  *src;
210   OBJREC  *so;
# Line 251 | Line 258 | register OBJREC  *m;
258   }
259  
260  
261 + int
262   spotout(r, s)                   /* check if we're outside spot region */
263   register RAY  *r;
264   register SPOT  *s;
# Line 351 | Line 359 | OBJREC  *op;
359   }
360  
361  
362 + int
363   commonspot(sp1, sp2, org)       /* set sp1 to intersection of sp1 and sp2 */
364   register SPOT  *sp1, *sp2;
365   FVECT  org;
# Line 374 | Line 383 | FVECT  org;
383   }
384  
385  
386 + int
387   commonbeam(sp1, sp2, dir)       /* set sp1 to intersection of sp1 and sp2 */
388   register SPOT  *sp1, *sp2;
389   FVECT  dir;
# Line 398 | Line 408 | FVECT  dir;
408   }
409  
410  
411 + int
412   checkspot(sp, nrm)              /* check spotlight for behind source */
413   register SPOT  *sp;     /* spotlight */
414   FVECT  nrm;             /* source surface normal */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines