--- ray/src/rt/srcsamp.c 1991/10/23 08:50:06 1.5 +++ ray/src/rt/srcsamp.c 1992/07/21 12:47:12 2.3 @@ -24,11 +24,13 @@ register SRCINDEX *si; /* source index (modified to FVECT vpos; double d; register int i; - +nextsample: while (++si->sp >= si->np) { /* get next sample */ if (++si->sn >= nsources) return(0.0); /* no more */ - if (srcsizerat <= FTINY) + if (source[si->sn].sflags & SSKIP) + si->np = 0; + else if (srcsizerat <= FTINY) nopart(si, r); else { for (i = si->sn; source[i].sflags & SVIRTUAL; @@ -74,7 +76,7 @@ register SRCINDEX *si; /* source index (modified to r->rdir[i] -= r->rorg[i]; /* compute distance */ if ((d = normalize(r->rdir)) == 0.0) - return(nextssamp(r, si)); /* at source! */ + goto nextsample; /* at source! */ /* compute sample size */ si->dom = source[si->sn].ss2; @@ -90,6 +92,8 @@ register SRCINDEX *si; /* source index (modified to } if (source[si->sn].sflags & SDISTANT) return(FHUGE); + if (si->dom <= 1e-4) + goto nextsample; /* behind source? */ si->dom /= d*d; return(d); /* sample OK, return distance */ } @@ -216,7 +220,7 @@ flatpart(si, r) /* partition a flat source */ register SRCINDEX *si; register RAY *r; { - register double *vp; + register FLOAT *vp; FVECT v; double du2, dv2; int pi; @@ -300,7 +304,7 @@ scylform(sn, dir) /* compute cosine for cylinder's pr int sn; register FVECT dir; /* assume normalized */ { - register double *dv; + register FLOAT *dv; double d; dv = source[sn].ss[SU];