| 488 |
|
|
| 489 |
|
/* Query projected solid angle coverage for non-diffuse BSDF direction */ |
| 490 |
|
SDError |
| 491 |
< |
SDsizeBSDF(double *projSA, const FVECT vec, int qflags, const SDData *sd) |
| 491 |
> |
SDsizeBSDF(double *projSA, const FVECT v1, const RREAL *v2, |
| 492 |
> |
int qflags, const SDData *sd) |
| 493 |
|
{ |
| 494 |
|
SDSpectralDF *rdf; |
| 495 |
|
SDError ec; |
| 496 |
|
int i; |
| 497 |
|
/* check arguments */ |
| 498 |
< |
if ((projSA == NULL) | (vec == NULL) | (sd == NULL)) |
| 498 |
> |
if ((projSA == NULL) | (v1 == NULL)) |
| 499 |
|
return SDEargument; |
| 500 |
|
/* initialize extrema */ |
| 501 |
|
switch (qflags) { |
| 511 |
|
case 0: |
| 512 |
|
return SDEargument; |
| 513 |
|
} |
| 514 |
< |
if (vec[2] > .0) /* front surface query? */ |
| 514 |
> |
if (v1[2] > .0) /* front surface query? */ |
| 515 |
|
rdf = sd->rf; |
| 516 |
|
else |
| 517 |
|
rdf = sd->rb; |
| 518 |
|
ec = SDEdata; /* run through components */ |
| 519 |
|
for (i = (rdf==NULL) ? 0 : rdf->ncomp; i--; ) { |
| 520 |
< |
ec = (*rdf->comp[i].func->queryProjSA)(projSA, vec, qflags, |
| 521 |
< |
rdf->comp[i].dist); |
| 520 |
> |
ec = (*rdf->comp[i].func->queryProjSA)(projSA, v1, v2, |
| 521 |
> |
qflags, rdf->comp[i].dist); |
| 522 |
|
if (ec) |
| 523 |
|
return ec; |
| 524 |
|
} |
| 525 |
|
for (i = (sd->tf==NULL) ? 0 : sd->tf->ncomp; i--; ) { |
| 526 |
< |
ec = (*sd->tf->comp[i].func->queryProjSA)(projSA, vec, qflags, |
| 527 |
< |
sd->tf->comp[i].dist); |
| 526 |
> |
ec = (*sd->tf->comp[i].func->queryProjSA)(projSA, v1, v2, |
| 527 |
> |
qflags, sd->tf->comp[i].dist); |
| 528 |
|
if (ec) |
| 529 |
|
return ec; |
| 530 |
|
} |