--- ray/src/rt/source.c 1989/09/29 10:04:01 1.17 +++ ray/src/rt/source.c 1990/12/12 22:43:03 1.23 @@ -310,6 +310,8 @@ char *p; /* data for f */ double prob, ourthresh, hwt, test2, hit2; RAY sr; + if (nsources <= 0) + return; srccnt = (CONTRIB *)malloc(nsources*sizeof(CONTRIB)); cntord = (CNTPTR *)malloc(nsources*sizeof(CNTPTR)); if (srccnt == NULL || cntord == NULL) @@ -338,7 +340,7 @@ char *p; /* data for f */ (source[sn].so, &sr) )) continue; /* compute contribution */ - rayshade(&sr, sr.ro->omod); + raycont(&sr); multcolor(srccnt[sn].val, sr.rcol); cntord[sn].brt = bright(srccnt[sn].val); } @@ -376,10 +378,11 @@ char *p; /* data for f */ /* test for hit */ rayorigin(&sr, r, SHADOW, 1.0); VCOPY(sr.rdir, srccnt[cntord[sn].sno].dir); + sr.rsrc = cntord[sn].sno; if (localhit(&sr, &thescene) && sr.ro != source[cntord[sn].sno].so) { /* check for transmission */ - rayshade(&sr, sr.ro->omod); + raycont(&sr); if (bright(sr.rcol) <= FTINY) continue; /* missed! */ (*f)(srccnt[cntord[sn].sno].val, p, @@ -394,7 +397,7 @@ char *p; /* data for f */ } /* weighted hit rate */ hwt = hit2 / test2; -#ifdef notdef +#ifdef DEBUG sprintf(errmsg, "%d tested, %d untested, %f hit rate\n", sn, ncnts-sn, hwt); eputs(errmsg); @@ -407,8 +410,8 @@ char *p; /* data for f */ addcolor(r->rcol, srccnt[cntord[sn].sno].val); } - free(srccnt); - free(cntord); + free((char *)srccnt); + free((char *)cntord); } @@ -452,6 +455,8 @@ register RAY *r; m->oargs.farg[2]); /* modify value */ multcolor(r->rcol, r->pcol); + /* assign distance */ + r->rt = r->rot; } }