--- ray/src/common/loadbsdf.c 2011/02/18 02:41:55 3.1 +++ ray/src/common/loadbsdf.c 2013/04/21 21:36:23 3.8 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: loadbsdf.c,v 3.1 2011/02/18 02:41:55 greg Exp $"; +static const char RCSid[] = "$Id: loadbsdf.c,v 3.8 2013/04/21 21:36:23 greg Exp $"; #endif /* * Simple interface for loading BSDF, Radiance-specific search @@ -14,12 +14,11 @@ static const char RCSid[] = "$Id: loadbsdf.c,v 3.1 201 char * transSDError(SDError ec) { - static char mymess[128]; - if (!SDerrorDetail[0]) - return(strcpy(mymess, SDerrorEnglish[ec])); - sprintf(mymess, "%s: %s", SDerrorEnglish[ec], SDerrorDetail); - return(mymess); + return(strcpy(errmsg, SDerrorList[ec])); + + sprintf(errmsg, "%s: %s", SDerrorList[ec], SDerrorDetail); + return(errmsg); } /* Make sure we're not over 100% scattering for this component */ @@ -36,30 +35,49 @@ checkDF(const char *nm, double amt, const SDSpectralDF /* Load a BSDF file and perform some basic checks */ SDData * -loadBSDF(char *name) +loadBSDF(char *fname) { - SDData *sd = SDgetCache(name); + SDData *sd; SDError ec; char *pname; + sd = SDgetCache(fname); /* look up or allocate */ if (sd == NULL) error(SYSTEM, "out of memory in loadBSDF"); - if (SDisLoaded(sd)) + if (SDisLoaded(sd)) /* already in memory? */ return(sd); - - pname = getpath(name, getrlibpath(), R_OK); + /* else find and load it */ + pname = getpath(fname, getrlibpath(), R_OK); if (pname == NULL) { - sprintf(errmsg, "cannot find BSDF file \"%s\"", name); + sprintf(errmsg, "cannot find BSDF file \"%s\"", fname); error(USER, errmsg); } ec = SDloadFile(sd, pname); if (ec) error(USER, transSDError(ec)); /* simple checks */ - checkDF(name, sd->rLambFront.cieY, sd->rf, "front reflection"); - checkDF(name, sd->rLambBack.cieY, sd->rb, "rear reflection"); - checkDF(name, sd->tLamb.cieY, sd->tf, "transmission"); - + checkDF(sd->name, sd->rLambFront.cieY, sd->rf, "front reflection"); + checkDF(sd->name, sd->rLambBack.cieY, sd->rb, "rear reflection"); + checkDF(sd->name, sd->tLamb.cieY, sd->tf, "front transmission"); + checkDF(sd->name, sd->tLamb.cieY, sd->tb, "back transmission"); +#if 0 +fprintf(stderr, "Loaded BSDF '%s' (file \"%s\")\n", sd->name, pname); +fprintf(stderr, "Front diffuse reflectance: %.3f%%\n", sd->rLambFront.cieY*100.); +fprintf(stderr, "Back diffuse reflectance: %.3f%%\n", sd->rLambBack.cieY*100.); +fprintf(stderr, "Diffuse transmittance: %.3f%%\n", sd->tLamb.cieY*100.); +if (sd->rf) +fprintf(stderr, "Maximum direct hemispherical front reflection: %.3f%%\n", +sd->rf->maxHemi*100.); +if (sd->rb) +fprintf(stderr, "Maximum direct hemispherical back reflection: %.3f%%\n", +sd->rb->maxHemi*100.); +if (sd->tf) +fprintf(stderr, "Maximum direct hemispherical front transmission: %.3f%%\n", +sd->tf->maxHemi*100.); +if (sd->tb) +fprintf(stderr, "Maximum direct hemispherical back transmission: %.3f%%\n", +sd->tb->maxHemi*100.); +#endif SDretainSet = SDretainAll; /* keep data in core */ return(sd); }