star-sf

Set of surface and volume scattering functions
git clone git://git.meso-star.fr/star-sf.git
Log | Files | Refs | README | LICENSE

commit a87af66e64385f762d8e7e736751aa4a22aad3b8
parent 7b2b81aa5f40ea71924e7eac6e61f817662edabd
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Mon, 12 Sep 2016 15:24:44 +0200

Update the ssf_fresnel API

The eval function directly returns the Fresnel term rather than
affecting its value to an output variable.

Diffstat:
Msrc/ssf.h | 5++---
Msrc/ssf_fresnel.c | 10++++------
Msrc/test_ssf_fresnel.c | 15+++------------
Msrc/test_ssf_fresnel_dielectric_dielectric.c | 4++--
Msrc/test_ssf_fresnel_no_op.c | 10+++-------
5 files changed, 14 insertions(+), 30 deletions(-)

diff --git a/src/ssf.h b/src/ssf.h @@ -156,11 +156,10 @@ SSF_API res_T ssf_fresnel_ref_put (struct ssf_fresnel* fresnel); -SSF_API res_T +SSF_API double ssf_fresnel_eval (struct ssf_fresnel* fresnel, - const double cos_theta, /* Cos between facet normal and outgoing dir */ - double* value); + const double cos_theta); /* Cos between facet normal and outgoing dir */ /* Retrieve the internal data of the Fresnel term. Usefull for user defined * Fresnel terms on which the caller has to retrieve their data to setup the diff --git a/src/ssf_fresnel.c b/src/ssf_fresnel.c @@ -110,13 +110,11 @@ ssf_fresnel_ref_put(struct ssf_fresnel* fresnel) return RES_OK; } -res_T -ssf_fresnel_eval - (struct ssf_fresnel* fresnel, const double cos_theta, double* val) +double +ssf_fresnel_eval(struct ssf_fresnel* fresnel, const double cos_theta) { - if(!fresnel || cos_theta < 0.0 || !val) return RES_BAD_ARG; - *val = fresnel->type.eval(fresnel->data, cos_theta); - return RES_OK; + ASSERT(fresnel && cos_theta >= 0); + return fresnel->type.eval(fresnel->data, cos_theta); } res_T diff --git a/src/test_ssf_fresnel.c b/src/test_ssf_fresnel.c @@ -60,7 +60,6 @@ main(int argc, char** argv) struct fresnel* data; struct ssf_fresnel* fresnel; struct ssf_fresnel_type type; - double val; (void)argc, (void)argv; mem_init_proxy_allocator(&allocator, &mem_default_allocator); @@ -125,18 +124,10 @@ main(int argc, char** argv) data->cos_theta = 0.1; data->value = 1.234; - CHECK(ssf_fresnel_eval(NULL, -1, NULL), RES_BAD_ARG); - CHECK(ssf_fresnel_eval(fresnel, -1, NULL), RES_BAD_ARG); - CHECK(ssf_fresnel_eval(NULL, 0.1, NULL), RES_BAD_ARG); - CHECK(ssf_fresnel_eval(fresnel, 0.1, NULL), RES_BAD_ARG); - CHECK(ssf_fresnel_eval(NULL, -1, &val), RES_BAD_ARG); - CHECK(ssf_fresnel_eval(fresnel, -1, &val), RES_BAD_ARG); - CHECK(ssf_fresnel_eval(NULL, 0.1, &val), RES_BAD_ARG); - CHECK(ssf_fresnel_eval(fresnel, 0.1, &val), RES_OK); - CHECK(val, data->value); + CHECK(ssf_fresnel_eval(fresnel, 0.1), data->value); + data->cos_theta = 1.234; data->value = 8.1; - CHECK(ssf_fresnel_eval(fresnel, 0.1, &val), RES_OK); - CHECK(val, data->value); + CHECK(ssf_fresnel_eval(fresnel, 1.234), data->value); CHECK(fresnel_is_init, 1); CHECK(ssf_fresnel_ref_put(fresnel), RES_OK); diff --git a/src/test_ssf_fresnel_dielectric_dielectric.c b/src/test_ssf_fresnel_dielectric_dielectric.c @@ -40,13 +40,13 @@ main(int argc, char** argv) CHECK(ssf_fresnel_dielectric_dielectric_setup(dummy,-1.0, -1.0), RES_BAD_ARG); CHECK(ssf_fresnel_dielectric_dielectric_setup(fresnel,1.000277, 1.5), RES_OK); - CHECK(ssf_fresnel_eval(fresnel, 1, &val), RES_OK); + val = ssf_fresnel_eval(fresnel, 1); CHECK(eq_eps(val, 0.04, 1.e-4), 1); FOR_EACH(i, 0, nsteps+1) { const double theta_i = MMIN((double)i*step, PI/2); const double cos_theta_i = cos(theta_i); - CHECK(ssf_fresnel_eval(fresnel, cos_theta_i, &val), RES_OK); + val = ssf_fresnel_eval(fresnel, cos_theta_i); printf("%g %g\n", theta_i, val); } diff --git a/src/test_ssf_fresnel_no_op.c b/src/test_ssf_fresnel_no_op.c @@ -20,19 +20,15 @@ int main(int argc, char** argv) { struct mem_allocator allocator; - double val; struct ssf_fresnel* fresnel; (void)argc, (void)argv; mem_init_proxy_allocator(&allocator, &mem_default_allocator); CHECK(ssf_fresnel_create(&allocator, &ssf_fresnel_no_op, &fresnel), RES_OK); - CHECK(ssf_fresnel_eval(fresnel, 0, &val), RES_OK); - CHECK(val, 1.0); - CHECK(ssf_fresnel_eval(fresnel, 1, &val), RES_OK); - CHECK(val, 1.0); - CHECK(ssf_fresnel_eval(fresnel, 0.48, &val), RES_OK); - CHECK(val, 1.0); + CHECK(ssf_fresnel_eval(fresnel, 0), 1.0); + CHECK(ssf_fresnel_eval(fresnel, 1), 1.0); + CHECK(ssf_fresnel_eval(fresnel, 0.48), 1.0); CHECK(ssf_fresnel_ref_put(fresnel), RES_OK);