--- ray/src/common/loadbsdf.c 2011/02/18 02:41:55 3.1 +++ ray/src/common/loadbsdf.c 2016/03/22 03:56:17 3.11 @@ -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.11 2016/03/22 03:56:17 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,55 @@ 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); - error(USER, errmsg); + sprintf(errmsg, "cannot find BSDF file \"%s\"", fname); + error(SYSTEM, 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"); +#ifdef DEBUG +{ +float rgb[3]; +fprintf(stderr, "Loaded BSDF '%s' (file \"%s\")\n", sd->name, pname); +ccy2rgb(&sd->rLambFront.spec, sd->rLambFront.cieY, rgb); +fprintf(stderr, "Front diffuse RGB: %.4f %.4f %.4f\n", rgb[0], rgb[1], rgb[2]); +ccy2rgb(&sd->rLambBack.spec, sd->rLambBack.cieY, rgb); +fprintf(stderr, "Back diffuse RGB: %.4f %.4f %.4f\n", rgb[0], rgb[1], rgb[2]); +ccy2rgb(&sd->tLamb.spec, sd->tLamb.cieY, rgb); +fprintf(stderr, "Diffuse RGB transmittance: %.4f %.4f %.4f\n", rgb[0], rgb[1], rgb[2]); +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); }