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.16 by greg, Sat Feb 19 01:48:59 2011 UTC vs.
Revision 2.20 by greg, Mon Apr 11 03:47:46 2011 UTC

# Line 85 | Line 85 | SDloadGeometry(SDData *sd, ezxml_t wdb)
85  
86          if (wdb == NULL)                /* no geometry section? */
87                  return SDEnone;
88        sprintf(SDerrorDetail, "Negative size in \"%s\"", sd->name);
88          sd->dim[0] = sd->dim[1] = sd->dim[2] = .0;
89          if ((geom = ezxml_child(wdb, "Width")) != NULL)
90                  sd->dim[0] = atof(ezxml_txt(geom)) *
# Line 96 | Line 95 | SDloadGeometry(SDData *sd, ezxml_t wdb)
95          if ((geom = ezxml_child(wdb, "Thickness")) != NULL)
96                  sd->dim[2] = atof(ezxml_txt(geom)) *
97                                  to_meters(ezxml_attr(geom, "unit"));
98 <        if ((sd->dim[0] < .0) | (sd->dim[1] < .0) | (sd->dim[2] < .0))
98 >        if ((sd->dim[0] < .0) | (sd->dim[1] < .0) | (sd->dim[2] < .0)) {
99 >                sprintf(SDerrorDetail, "Negative size in \"%s\"", sd->name);
100                  return SDEdata;
101 +        }
102          if ((geom = ezxml_child(wdb, "Geometry")) == NULL ||
103                          (mgfstr = ezxml_txt(geom)) == NULL)
104                  return SDEnone;
# Line 268 | Line 269 | SDclipName(char *res, const char *fname)
269  
270   /* Initialize an unused BSDF struct (simply clears to zeroes) */
271   void
272 < SDclearBSDF(SDData *sd)
272 > SDclearBSDF(SDData *sd, const char *fname)
273   {
274 <        if (sd != NULL)
275 <                memset(sd, 0, sizeof(SDData));
274 >        if (sd == NULL)
275 >                return;
276 >        memset(sd, 0, sizeof(SDData));
277 >        if (fname == NULL)
278 >                return;
279 >        SDclipName(sd->name, fname);
280   }
281  
282   /* Free data associated with BSDF struct */
# Line 450 | Line 455 | SDmultiSamp(double t[], int n, double randX)
455          bitmask_t       ndx, coord[MS_MAXDIM];
456          
457          while (n > MS_MAXDIM)           /* punt for higher dimensions */
458 <                t[--n] = drand48();
458 >                t[--n] = rand()*(1./(RAND_MAX+.5));
459          nBits = (8*sizeof(bitmask_t) - 1) / n;
460          ndx = randX * (double)((bitmask_t)1 << (nBits*n));
461                                          /* get coordinate on Hilbert curve */
# Line 458 | Line 463 | SDmultiSamp(double t[], int n, double randX)
463                                          /* convert back to [0,1) range */
464          scale = 1. / (double)((bitmask_t)1 << nBits);
465          while (n--)
466 <                t[n] = scale * ((double)coord[n] + drand48());
466 >                t[n] = scale * ((double)coord[n] + rand()*(1./(RAND_MAX+.5)));
467   }
468  
469   #undef MS_MAXDIM
# Line 488 | Line 493 | SDsizeBSDF(double *projSA, const FVECT vec, int qflags
493          if ((projSA == NULL) | (vec == NULL) | (sd == NULL))
494                  return SDEargument;
495                                          /* initialize extrema */
496 <        switch (qflags & SDqueryMin+SDqueryMax) {
496 >        switch (qflags) {
497          case SDqueryMax:
498                  projSA[0] = .0;
499                  break;
# Line 518 | Line 523 | SDsizeBSDF(double *projSA, const FVECT vec, int qflags
523                  if (ec)
524                          return ec;
525          }
526 <        return ec;
526 >        if (ec) {                       /* all diffuse? */
527 >                projSA[0] = M_PI;
528 >                if (qflags == SDqueryMin+SDqueryMax)
529 >                        projSA[1] = M_PI;
530 >        }
531 >        return SDEnone;
532   }
533  
534   /* Return BSDF for the given incident and scattered ray vectors */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines