| 31 |
|
static const char klems_quarter[] = "LBNL/Klems Quarter"; |
| 32 |
|
static const char *kbasis = klems_full; |
| 33 |
|
/* number of BSDF samples per patch */ |
| 34 |
< |
static int npsamps = 256; |
| 34 |
> |
static int npsamps = 1024; |
| 35 |
|
/* limit on number of RBF lobes */ |
| 36 |
|
static int lobe_lim = 15000; |
| 37 |
|
/* progress bar length */ |
| 41 |
|
static char *wrapBSDF[MAXCARG] = {"wrapBSDF", "-W", "-UU"}; |
| 42 |
|
static int wbsdfac = 3; |
| 43 |
|
|
| 44 |
< |
/* Add argument to wrapBSDF, allocating space if isstatic */ |
| 44 |
> |
/* Add argument to wrapBSDF, allocating space if !isstatic */ |
| 45 |
|
static void |
| 46 |
|
add_wbsdf(const char *arg, int isstatic) |
| 47 |
|
{ |
| 202 |
|
goto err; |
| 203 |
|
sum += sdv.cieY; |
| 204 |
|
if (rbf_colorimetry == RBCtristimulus) { |
| 205 |
< |
c_ccvt(&sdv.spec, C_CSXY); |
| 206 |
< |
xsum += sdv.cieY*sdv.spec.cx; |
| 207 |
< |
ysum += sdv.cieY*sdv.spec.cy; |
| 205 |
> |
xsum += sdv.cieY * sdv.spec.cx; |
| 206 |
> |
ysum += sdv.cieY * sdv.spec.cy; |
| 207 |
|
} |
| 208 |
|
} |
| 209 |
|
fprintf(cfp[CIE_Y], "\t%.3e\n", sum/npsamps); |
| 210 |
|
if (rbf_colorimetry == RBCtristimulus) { |
| 211 |
< |
fprintf(cfp[CIE_X], "\t%3e\n", xsum*sum/(npsamps*ysum)); |
| 212 |
< |
fprintf(cfp[CIE_Z], "\t%3e\n", |
| 211 |
> |
fprintf(cfp[CIE_X], "\t%.3e\n", xsum*sum/(npsamps*ysum)); |
| 212 |
> |
fprintf(cfp[CIE_Z], "\t%.3e\n", |
| 213 |
|
(sum - xsum - ysum)*sum/(npsamps*ysum)); |
| 214 |
|
} |
| 215 |
|
} |
| 251 |
|
goto err; |
| 252 |
|
sum += sdv.cieY; |
| 253 |
|
if (rbf_colorimetry == RBCtristimulus) { |
| 254 |
< |
c_ccvt(&sdv.spec, C_CSXY); |
| 255 |
< |
xsum += sdv.cieY*sdv.spec.cx; |
| 257 |
< |
ysum += sdv.cieY*sdv.spec.cy; |
| 254 |
> |
xsum += sdv.cieY * sdv.spec.cx; |
| 255 |
> |
ysum += sdv.cieY * sdv.spec.cy; |
| 256 |
|
} |
| 257 |
|
} |
| 258 |
|
fprintf(cfp[CIE_Y], "\t%.3e\n", sum/npsamps); |
| 259 |
|
if (rbf_colorimetry == RBCtristimulus) { |
| 260 |
< |
fprintf(cfp[CIE_X], "\t%3e\n", xsum*sum/(npsamps*ysum)); |
| 261 |
< |
fprintf(cfp[CIE_Z], "\t%3e\n", |
| 260 |
> |
fprintf(cfp[CIE_X], "\t%.3e\n", xsum*sum/(npsamps*ysum)); |
| 261 |
> |
fprintf(cfp[CIE_Z], "\t%.3e\n", |
| 262 |
|
(sum - xsum - ysum)*sum/(npsamps*ysum)); |
| 263 |
|
} |
| 264 |
|
} |
| 299 |
|
goto err; |
| 300 |
|
sum += sdv.cieY; |
| 301 |
|
if (rbf_colorimetry == RBCtristimulus) { |
| 302 |
< |
c_ccvt(&sdv.spec, C_CSXY); |
| 303 |
< |
xsum += sdv.cieY*sdv.spec.cx; |
| 306 |
< |
ysum += sdv.cieY*sdv.spec.cy; |
| 302 |
> |
xsum += sdv.cieY * sdv.spec.cx; |
| 303 |
> |
ysum += sdv.cieY * sdv.spec.cy; |
| 304 |
|
} |
| 305 |
|
} |
| 306 |
|
fprintf(cfp[CIE_Y], "\t%.3e\n", sum/npsamps); |
| 307 |
|
if (rbf_colorimetry == RBCtristimulus) { |
| 308 |
< |
fprintf(cfp[CIE_X], "\t%3e\n", xsum*sum/(npsamps*ysum)); |
| 309 |
< |
fprintf(cfp[CIE_Z], "\t%3e\n", |
| 308 |
> |
fprintf(cfp[CIE_X], "\t%.3e\n", xsum*sum/(npsamps*ysum)); |
| 309 |
> |
fprintf(cfp[CIE_Z], "\t%.3e\n", |
| 310 |
|
(sum - xsum - ysum)*sum/(npsamps*ysum)); |
| 311 |
|
} |
| 312 |
|
} |
| 329 |
|
if ((bsd.tb != NULL) | (bsd.tf != NULL)) { |
| 330 |
|
input_orient = -1; output_orient = 1; |
| 331 |
|
cfp[CIE_Y] = open_component_file(CIE_Y); |
| 332 |
< |
if (bsd.tb != NULL && bsd.tb->comp[0].cspec[2].flags) { |
| 333 |
< |
rbf_colorimetry = RBCtristimulus; |
| 332 |
> |
if (bsd.tb != NULL) |
| 333 |
> |
rbf_colorimetry = bsd.tb->comp[0].cspec[2].flags |
| 334 |
> |
? RBCtristimulus : RBCphotopic ; |
| 335 |
> |
if (rbf_colorimetry == RBCtristimulus) { |
| 336 |
|
cfp[CIE_X] = open_component_file(CIE_X); |
| 337 |
|
cfp[CIE_Z] = open_component_file(CIE_Z); |
| 338 |
< |
} else |
| 340 |
< |
rbf_colorimetry = RBCphotopic; |
| 338 |
> |
} |
| 339 |
|
for (j = 0; j < abp->nangles; j++) { |
| 340 |
|
for (i = 0; i < abp->nangles; i++) { |
| 341 |
|
sum = 0; /* average over patches */ |
| 348 |
|
goto err; |
| 349 |
|
sum += sdv.cieY; |
| 350 |
|
if (rbf_colorimetry == RBCtristimulus) { |
| 351 |
< |
c_ccvt(&sdv.spec, C_CSXY); |
| 352 |
< |
xsum += sdv.cieY*sdv.spec.cx; |
| 355 |
< |
ysum += sdv.cieY*sdv.spec.cy; |
| 351 |
> |
xsum += sdv.cieY * sdv.spec.cx; |
| 352 |
> |
ysum += sdv.cieY * sdv.spec.cy; |
| 353 |
|
} |
| 354 |
|
} |
| 355 |
|
fprintf(cfp[CIE_Y], "\t%.3e\n", sum/npsamps); |
| 356 |
|
if (rbf_colorimetry == RBCtristimulus) { |
| 357 |
< |
fprintf(cfp[CIE_X], "\t%3e\n", xsum*sum/(npsamps*ysum)); |
| 358 |
< |
fprintf(cfp[CIE_Z], "\t%3e\n", |
| 357 |
> |
fprintf(cfp[CIE_X], "\t%.3e\n", xsum*sum/(npsamps*ysum)); |
| 358 |
> |
fprintf(cfp[CIE_Z], "\t%.3e\n", |
| 359 |
|
(sum - xsum - ysum)*sum/(npsamps*ysum)); |
| 360 |
|
} |
| 361 |
|
} |
| 466 |
|
|
| 467 |
|
eval_rbfcol(&sdv, rbf, vout); |
| 468 |
|
sum += sdv.cieY; |
| 469 |
< |
if (XZarr != NULL) { |
| 470 |
< |
c_ccvt(&sdv.spec, C_CSXY); |
| 471 |
< |
xsum += sdv.cieY*sdv.spec.cx; |
| 475 |
< |
ysum += sdv.cieY*sdv.spec.cy; |
| 469 |
> |
if (rbf_colorimetry == RBCtristimulus) { |
| 470 |
> |
xsum += sdv.cieY * sdv.spec.cx; |
| 471 |
> |
ysum += sdv.cieY * sdv.spec.cy; |
| 472 |
|
} |
| 473 |
|
} |
| 474 |
|
n = j*abp->nangles + i; |
| 475 |
< |
bsdfarr[n] = sum / (double)npsamps; |
| 476 |
< |
if (XZarr != NULL) { |
| 475 |
> |
bsdfarr[n] = sum / npsamps; |
| 476 |
> |
if (rbf_colorimetry == RBCtristimulus) { |
| 477 |
|
XZarr[n][0] = xsum*sum/(npsamps*ysum); |
| 478 |
|
XZarr[n][1] = (sum - xsum - ysum)*sum/(npsamps*ysum); |
| 479 |
|
} |
| 515 |
|
} |
| 516 |
|
} |
| 517 |
|
|
| 518 |
< |
#ifdef _WIN32 |
| 518 |
> |
#if defined(_WIN32) || defined(_WIN64) |
| 519 |
|
/* Execute wrapBSDF command (may never return) */ |
| 520 |
|
static int |
| 521 |
|
wrap_up(void) |
| 602 |
|
add_wbsdf("-f", 1); |
| 603 |
|
add_wbsdf(argv[i], 1); |
| 604 |
|
} else { |
| 605 |
< |
fcompile(argv[i]); |
| 605 |
> |
char *fpath = getpath(argv[i], |
| 606 |
> |
getrlibpath(), 0); |
| 607 |
> |
if (fpath == NULL) { |
| 608 |
> |
fprintf(stderr, |
| 609 |
> |
"%s: cannot find file '%s'\n", |
| 610 |
> |
argv[0], argv[i]); |
| 611 |
> |
return(1); |
| 612 |
> |
} |
| 613 |
> |
fcompile(fpath); |
| 614 |
|
single_plane_incident = 0; |
| 615 |
|
} |
| 616 |
|
} else |