| 199 |
|
} |
| 200 |
|
wtl = ezxml_child(ezxml_child(fl, "Optical"), "Layer"); |
| 201 |
|
if (wtl == NULL) { |
| 202 |
< |
sprintf(SDerrorDetail, "BSDF \"%s\": no optical layers'", |
| 202 |
> |
sprintf(SDerrorDetail, "BSDF \"%s\": no optical layers", |
| 203 |
|
sd->name); |
| 204 |
|
ezxml_free(fl); |
| 205 |
|
return SDEformat; |
| 422 |
|
if (fname == NULL || !*fname) |
| 423 |
|
return NULL; |
| 424 |
|
SDerrorDetail[0] = '\0'; |
| 425 |
+ |
/* PLACE MUTEX LOCK HERE FOR THREAD-SAFE */ |
| 426 |
|
if ((sd = SDgetCache(fname)) == NULL) { |
| 427 |
|
SDreportError(SDEmemory, stderr); |
| 428 |
|
return NULL; |
| 430 |
|
if (!SDisLoaded(sd) && (ec = SDloadFile(sd, fname))) { |
| 431 |
|
SDreportError(ec, stderr); |
| 432 |
|
SDfreeCache(sd); |
| 433 |
< |
return NULL; |
| 433 |
> |
sd = NULL; |
| 434 |
|
} |
| 435 |
+ |
/* END MUTEX LOCK */ |
| 436 |
|
return sd; |
| 437 |
|
} |
| 438 |
|
|
| 597 |
|
rdf = sd->rb; |
| 598 |
|
tdf = (sd->tb != NULL) ? sd->tb : sd->tf; |
| 599 |
|
} |
| 600 |
< |
if (v2 != NULL) /* bidirectional? */ |
| 600 |
> |
if (v2 != NULL) { /* bidirectional? */ |
| 601 |
|
if (v1[2] > 0 ^ v2[2] > 0) |
| 602 |
|
rdf = NULL; |
| 603 |
|
else |
| 604 |
|
tdf = NULL; |
| 605 |
+ |
} |
| 606 |
|
ec = SDEdata; /* run through components */ |
| 607 |
|
for (i = (rdf==NULL) ? 0 : rdf->ncomp; i--; ) { |
| 608 |
|
ec = (*rdf->comp[i].func->queryProjSA)(projSA, v1, v2, |
| 766 |
|
cdarr[i] = (*rdf->comp[i].func->getCDist)(inVec, &rdf->comp[i]); |
| 767 |
|
if (cdarr[i] == NULL) |
| 768 |
|
cdarr[i] = &SDemptyCD; |
| 769 |
< |
else |
| 767 |
< |
sv->cieY += cdarr[i]->cTotal; |
| 769 |
> |
sv->cieY += cdarr[i]->cTotal; |
| 770 |
|
} |
| 771 |
|
if (sv->cieY <= 1e-6) { /* anything to sample? */ |
| 772 |
|
sv->cieY = .0; |