--- ray/src/rt/pmapcontrib.c 2015/05/20 13:43:28 2.6 +++ ray/src/rt/pmapcontrib.c 2015/05/20 14:44:12 2.7 @@ -7,7 +7,7 @@ supported by the Swiss National Science Foundation (SNSF, #147053) ================================================================== - $Id: pmapcontrib.c,v 2.6 2015/05/20 13:43:28 greg Exp $ + $Id: pmapcontrib.c,v 2.7 2015/05/20 14:44:12 greg Exp $ */ @@ -154,7 +154,7 @@ void photonContrib (PhotonMap *pmap, RAY *ray, COLOR i if (pmap -> srcContrib) { const PhotonPrimary *primary = pmap -> primary + sq -> photon -> primary; - SRCREC *sp = &source[primary -> srcIdx]; + const SRCREC *sp = &source[primary -> srcIdx]; OBJREC *srcMod = objptr(sp -> so -> omod); MODCONT *srcContrib = (MODCONT*)lu_find(pmap -> srcContrib, srcMod -> oname) -> data; @@ -174,11 +174,12 @@ void photonContrib (PhotonMap *pmap, RAY *ray, COLOR i rayorigin(&srcRay, SHADOW, NULL, NULL); srcRay.rsrc = primary -> srcIdx; VCOPY(srcRay.rorg, primary -> pos); - VCOPY(srcRay.rdir, primary -> dir); - if (!(source [primary -> srcIdx].sflags & SDISTANT ? - sourcehit(&srcRay) : - (*ofun[sp -> so -> otype].funp)(sp -> so, &srcRay))) + decodedir(srcRay.rdir, primary -> dir); + + if (!(sp->sflags & SDISTANT ? sourcehit(&srcRay) + : (*ofun[sp -> so -> otype].funp)(sp -> so, &srcRay))) continue; /* XXX shouldn't happen! */ + worldfunc(RCCONTEXT, &srcRay); set_eparams((char *)srcContrib -> params); }