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

Comparing ray/src/common/bsdf.c (file contents):
Revision 2.48 by greg, Mon Mar 24 04:00:45 2014 UTC vs.
Revision 2.54 by greg, Mon May 15 22:44:10 2017 UTC

# Line 199 | Line 199 | SDloadFile(SDData *sd, const char *fname)
199          }
200          wtl = ezxml_child(ezxml_child(fl, "Optical"), "Layer");
201          if (wtl == NULL) {
202 <                sprintf(SDerrorDetail, "BSDF \"%s\": no optical layers'",
202 >                sprintf(SDerrorDetail, "BSDF \"%s\": no optical layers",
203                                  sd->name);
204                  ezxml_free(fl);
205                  return SDEformat;
# Line 422 | Line 422 | SDcacheFile(const char *fname)
422          if (fname == NULL || !*fname)
423                  return NULL;
424          SDerrorDetail[0] = '\0';
425 +        /* PLACE MUTEX LOCK HERE FOR THREAD-SAFE */
426          if ((sd = SDgetCache(fname)) == NULL) {
427                  SDreportError(SDEmemory, stderr);
428                  return NULL;
# Line 429 | Line 430 | SDcacheFile(const char *fname)
430          if (!SDisLoaded(sd) && (ec = SDloadFile(sd, fname))) {
431                  SDreportError(ec, stderr);
432                  SDfreeCache(sd);
433 <                return NULL;
433 >                sd = NULL;
434          }
435 +        /* END MUTEX LOCK */
436          return sd;
437   }
438  
# Line 494 | Line 496 | SDsampComponent(SDValue *sv, FVECT ioVec, double randX
496                  sv->cieY = cd->cTotal;
497          if (sv->cieY <= 1e-6) {         /* nothing to sample? */
498                  sv->spec = c_dfcolor;
499 <                memset(ioVec, 0, 3*sizeof(double));
499 >                memset(ioVec, 0, sizeof(FVECT));
500                  return SDEnone;
501          }
502                                          /* compute sample direction */
# Line 595 | Line 597 | SDsizeBSDF(double *projSA, const FVECT v1, const RREAL
597                  rdf = sd->rb;
598                  tdf = (sd->tb != NULL) ? sd->tb : sd->tf;
599          }
600 <        if (v2 != NULL)                 /* bidirectional? */
600 >        if (v2 != NULL) {               /* bidirectional? */
601                  if (v1[2] > 0 ^ v2[2] > 0)
602                          rdf = NULL;
603                  else
604                          tdf = NULL;
605 +        }
606          ec = SDEdata;                   /* run through components */
607          for (i = (rdf==NULL) ? 0 : rdf->ncomp; i--; ) {
608                  ec = (*rdf->comp[i].func->queryProjSA)(projSA, v1, v2,
# Line 643 | Line 646 | SDevalBSDF(SDValue *sv, const FVECT outVec, const FVEC
646          } else if (!(inFront | outFront)) {
647                  *sv = sd->rLambBack;
648                  sdf = sd->rb;
649 <        } else if (inFront) {
649 >        } else if (outFront) {
650                  *sv = sd->tLamb;
651                  sdf = (sd->tf != NULL) ? sd->tf : sd->tb;
652 <        } else /* inBack */ {
652 >        } else /* inFront & !outFront */ {
653                  *sv = sd->tLamb;
654                  sdf = (sd->tb != NULL) ? sd->tb : sd->tf;
655          }
# Line 763 | Line 766 | SDsampBSDF(SDValue *sv, FVECT ioVec, double randX, int
766                  cdarr[i] = (*rdf->comp[i].func->getCDist)(inVec, &rdf->comp[i]);
767                  if (cdarr[i] == NULL)
768                          cdarr[i] = &SDemptyCD;
769 <                else
767 <                        sv->cieY += cdarr[i]->cTotal;
769 >                sv->cieY += cdarr[i]->cTotal;
770          }
771          if (sv->cieY <= 1e-6) {         /* anything to sample? */
772                  sv->cieY = .0;
773 <                memset(ioVec, 0, 3*sizeof(double));
773 >                memset(ioVec, 0, sizeof(FVECT));
774                  return SDEnone;
775          }
776                                          /* scale random variable */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines