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

Comparing ray/src/common/bsdf_m.c (file contents):
Revision 3.14 by greg, Mon Apr 25 15:48:05 2011 UTC vs.
Revision 3.15 by greg, Wed Apr 27 20:03:25 2011 UTC

# Line 418 | Line 418 | load_bsdf_data(SDData *sd, ezxml_t wdb, int rowinc)
418          int             i;
419                                          /* allocate BSDF component */
420          sdata = ezxml_txt(ezxml_child(wdb, "WavelengthDataDirection"));
421 +        if (!sdata)
422 +                return RC_FAIL;
423          /*
424           * Remember that front and back are reversed from WINDOW 6 orientations
425           * Favor their "Front" (incoming light) since that's more often valid
# Line 507 | Line 509 | load_bsdf_data(SDData *sd, ezxml_t wdb, int rowinc)
509          df->comp[0].dist = dp;
510          df->comp[0].func = &SDhandleMtx;
511                                          /* read BSDF data */
512 <        sdata = ezxml_txt(ezxml_child(wdb,"ScatteringData"));
512 >        sdata = ezxml_txt(ezxml_child(wdb, "ScatteringData"));
513          if (!sdata || !*sdata) {
514                  sprintf(SDerrorDetail, "Missing BSDF ScatteringData in '%s'",
515                                  sd->name);
# Line 521 | Line 523 | load_bsdf_data(SDData *sd, ezxml_t wdb, int rowinc)
523                                          sd->name);
524                          return RC_FORMERR;
525                  }
526 <                while (*sdnext && isspace(*sdnext))
526 >                while (isspace(*sdnext))
527                          sdnext++;
528                  if (*sdnext == ',') sdnext++;
529                  if (rowinc) {
# Line 546 | Line 548 | subtract_min(SDMat *sm)
548          for (i = n; --i; )
549                  if (sm->bsdf[i] < minv)
550                          minv = sm->bsdf[i];
551 +        
552 +        if (minv <= FTINY)
553 +                return .0;
554 +
555          for (i = n; i--; )
556                  sm->bsdf[i] -= minv;
557  
# Line 571 | Line 577 | extract_diffuse(SDValue *dv, SDSpectralDF *df)
577                  c_cmix(&dv->spec, dv->cieY, &dv->spec, ymin, &df->comp[n].cspec[0]);
578                  dv->cieY += ymin;
579          }
580 <        df->maxHemi -= dv->cieY;        /* adjust minimum hemispherical */
580 >        df->maxHemi -= dv->cieY;        /* adjust maximum hemispherical */
581                                          /* make sure everything is set */
582          c_ccvt(&dv->spec, C_CSXY+C_CSSPEC);
583   }
# Line 580 | Line 586 | extract_diffuse(SDValue *dv, SDSpectralDF *df)
586   SDError
587   SDloadMtx(SDData *sd, ezxml_t wtl)
588   {
589 <        ezxml_t                 wld, wdb;
590 <        int                     rowIn;
591 <        struct BSDF_data        *dp;
592 <        char                    *txt;
593 <        int                     rval;
588 <        
589 >        ezxml_t         wld, wdb;
590 >        int             rowIn;
591 >        char            *txt;
592 >        int             rval;
593 >                                        /* basic checks and data ordering */
594          txt = ezxml_txt(ezxml_child(ezxml_child(wtl,
595                          "DataDefinition"), "IncidentDataStructure"));
596          if (txt == NULL || !*txt) {
# Line 604 | Line 609 | SDloadMtx(SDData *sd, ezxml_t wtl)
609                                  sd->name);
610                  return SDEsupport;
611          }
612 <                                /* get angle basis */
612 >                                        /* get angle basis */
613          rval = load_angle_basis(ezxml_child(ezxml_child(wtl,
614                                  "DataDefinition"), "AngleBasis"));
615          if (rval < 0)
616                  return convert_errcode(rval);
617 <                                /* load BSDF components */
617 >                                        /* load BSDF components */
618          for (wld = ezxml_child(wtl, "WavelengthData");
619                                  wld != NULL; wld = wld->next) {
620                  if (strcasecmp(ezxml_txt(ezxml_child(wld,"Wavelength")),
# Line 620 | Line 625 | SDloadMtx(SDData *sd, ezxml_t wtl)
625                          if ((rval = load_bsdf_data(sd, wdb, rowIn)) < 0)
626                                  return convert_errcode(rval);
627          }
628 <                                /* separate diffuse components */
628 >                                        /* separate diffuse components */
629          extract_diffuse(&sd->rLambFront, sd->rf);
630          extract_diffuse(&sd->rLambBack, sd->rb);
631          extract_diffuse(&sd->tLamb, sd->tf);
632 <                                /* return success */
632 >                                        /* return success */
633          return SDEnone;
634   }
635  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines