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.50 by greg, Sun Feb 8 22:14:50 2015 UTC vs.
Revision 2.55 by greg, Thu May 10 22:55:35 2018 UTC

# 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 513 | Line 515 | SDsampComponent(SDValue *sv, FVECT ioVec, double randX
515                  c_cmix(&sv->spec, d, &sv->spec, coef[n], &sdc->cspec[n]);
516                  d += coef[n];
517          }
518 <                                        /* make sure everything is set */
517 <        c_ccvt(&sv->spec, C_CSXY+C_CSSPEC);
518 >        c_ccvt(&sv->spec, C_CSXY);      /* make sure (x,y) is set */
519          return SDEnone;
520   }
521  
# Line 595 | Line 596 | SDsizeBSDF(double *projSA, const FVECT v1, const RREAL
596                  rdf = sd->rb;
597                  tdf = (sd->tb != NULL) ? sd->tb : sd->tf;
598          }
599 <        if (v2 != NULL)                 /* bidirectional? */
599 >        if (v2 != NULL) {               /* bidirectional? */
600                  if (v1[2] > 0 ^ v2[2] > 0)
601                          rdf = NULL;
602                  else
603                          tdf = NULL;
604 +        }
605          ec = SDEdata;                   /* run through components */
606          for (i = (rdf==NULL) ? 0 : rdf->ncomp; i--; ) {
607                  ec = (*rdf->comp[i].func->queryProjSA)(projSA, v1, v2,
# Line 643 | Line 645 | SDevalBSDF(SDValue *sv, const FVECT outVec, const FVEC
645          } else if (!(inFront | outFront)) {
646                  *sv = sd->rLambBack;
647                  sdf = sd->rb;
648 <        } else if (inFront) {
648 >        } else if (outFront) {
649                  *sv = sd->tLamb;
650                  sdf = (sd->tf != NULL) ? sd->tf : sd->tb;
651 <        } else /* inBack */ {
651 >        } else /* inFront & !outFront */ {
652                  *sv = sd->tLamb;
653                  sdf = (sd->tb != NULL) ? sd->tb : sd->tf;
654          }
# Line 662 | Line 664 | SDevalBSDF(SDValue *sv, const FVECT outVec, const FVEC
664                          sv->cieY += coef[nch];
665                  }
666          }
667 <                                        /* make sure everything is set */
666 <        c_ccvt(&sv->spec, C_CSXY+C_CSSPEC);
667 >        c_ccvt(&sv->spec, C_CSXY);      /* make sure (x,y) is set */
668          return SDEnone;
669   }
670  
# Line 767 | Line 768 | SDsampBSDF(SDValue *sv, FVECT ioVec, double randX, int
768          }
769          if (sv->cieY <= 1e-6) {         /* anything to sample? */
770                  sv->cieY = .0;
771 <                memset(ioVec, 0, 3*sizeof(double));
771 >                memset(ioVec, 0, sizeof(FVECT));
772                  return SDEnone;
773          }
774                                          /* scale random variable */
# Line 813 | Line 814 | SDsampBSDF(SDValue *sv, FVECT ioVec, double randX, int
814   done:
815          if (cdarr != NULL)
816                  free(cdarr);
817 <                                        /* make sure everything is set */
817 <        c_ccvt(&sv->spec, C_CSXY+C_CSSPEC);
817 >        c_ccvt(&sv->spec, C_CSXY);      /* make sure (x,y) is set */
818          return SDEnone;
819   }
820  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines