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

Comparing ray/src/rt/raytrace.c (file contents):
Revision 1.3 by greg, Wed Apr 19 22:24:28 1989 UTC vs.
Revision 1.6 by greg, Mon Oct 16 18:57:02 1989 UTC

# Line 22 | Line 22 | extern double  minweight;              /* minimum ray weight */
22  
23   long  nrays = 0L;                       /* number of rays traced */
24  
25 < #define  MAXLOOP        32              /* modifier loop detection */
25 > #define  MAXLOOP        128             /* modifier loop detection */
26  
27   #define  RAYHIT         (-1)            /* return value for intercepted ray */
28  
# Line 68 | Line 68 | register RAY  *r;
68   {
69          extern int  (*trace)();
70  
71 <        if (localhit(r, &thescene))
72 <                if (r->clipset != NULL && inset(r->clipset, r->ro->omod))
73 <                        raytrans(r);            /* object is clipped */
74 <                else
75 <                        rayshade(r, r->ro->omod);
76 <        else if (sourcehit(r))
71 >        if (localhit(r, &thescene) || sourcehit(r))
72                  rayshade(r, r->ro->omod);
73  
74          if (trace != NULL)
# Line 100 | Line 95 | int  mod;
95   {
96          static int  depth = 0;
97          register OBJREC  *m;
98 +                                        /* check for clipped surface */
99 +        if (r->clipset != NULL && r->rot < FHUGE &&
100 +                        inset(r->clipset, mod)) {
101 +                raytrans(r);
102 +                return;
103 +        }
104                                          /* check for infinite loop */
105          if (depth++ >= MAXLOOP)
106 <                objerror(r->ro, USER, "material loop");
106 >                objerror(r->ro, USER, "possible modifier loop");
107          for ( ; mod != OVOID; mod = m->omod) {
108                  m = objptr(mod);
109 +                /****** unnecessary test since modifier() is always called
110                  if (!ismodifier(m->otype)) {
111                          sprintf(errmsg, "illegal modifier \"%s\"", m->oname);
112                          error(USER, errmsg);
113                  }
114 +                ******/
115                  (*ofun[m->otype].funp)(m, r);   /* execute function */
116                  m->lastrno = r->rno;
117                  if (ismaterial(m->otype)) {     /* materials call raytexture */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines