star-2d

Contour structuring for efficient 2D geometric queries
git clone git://git.meso-star.fr/star-2d.git
Log | Files | Refs | README | LICENSE

commit 839506a11d53a28b0c86af1c2af2a00473b5fe3e
parent 68b1b1401648160f86964af8c435833164eb198a
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Mon, 27 Jun 2016 16:03:22 +0200

Push further the s2d_scene_sample tests

Diffstat:
Msrc/test_s2d_primitive.c | 4++--
Msrc/test_s2d_sample.c | 59+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 61 insertions(+), 2 deletions(-)

diff --git a/src/test_s2d_primitive.c b/src/test_s2d_primitive.c @@ -101,9 +101,9 @@ main(int argc, char** argv) f2_normalize(attr.value, attr.value); switch(prim.prim_id) { case 0: CHECK(f2_eq_eps(attr.value, f2(tmp, 0.f, 1.f), 1.e-6f), 1); break; - case 1: CHECK(f2_eq_eps(attr.value, f2(tmp,-1.f, 0.f), 1.e-6f), 1); break; + case 1: CHECK(f2_eq_eps(attr.value, f2(tmp, 1.f, 0.f), 1.e-6f), 1); break; case 2: CHECK(f2_eq_eps(attr.value, f2(tmp, 0.f,-1.f), 1.e-6f), 1); break; - case 3: CHECK(f2_eq_eps(attr.value, f2(tmp, 1.f, 0.f), 1.e-6f), 1); break; + case 3: CHECK(f2_eq_eps(attr.value, f2(tmp,-1.f, 0.f), 1.e-6f), 1); break; default: CHECK(0, 1); /* Invalid primitive id */ } diff --git a/src/test_s2d_sample.c b/src/test_s2d_sample.c @@ -29,6 +29,8 @@ #include "s2d.h" #include "test_s2d_utils.h" +#include <rsys/float2.h> + #define NSAMPS 4096 static float @@ -116,13 +118,70 @@ main(int argc, char** argv) CHECK(prim.geom_id, box_id); CHECK(s, 0); + /* Should take effect on the next session */ + CHECK(s2d_shape_flip_contour(shape), RES_OK); + FOR_EACH(i, 0, NSAMPS) { + struct s2d_attrib attr_position; + struct s2d_attrib attr_normal; const float u = rand_canonic(); const float v = rand_canonic(); + float N[2], P[2]; + CHECK(s2d_scene_sample(scn, u, v, &prim, &s), RES_OK); CHECK(S2D_PRIMITIVE_EQ(&prim, &S2D_PRIMITIVE_NULL), 0); CHECK(prim.prim_id < 4, 1); CHECK(prim.geom_id, box_id); + + CHECK(s2d_primitive_get_attrib + (&prim, S2D_POSITION, s, &attr_position), RES_OK); + CHECK(s2d_primitive_get_attrib + (&prim, S2D_GEOMETRY_NORMAL, s, &attr_normal), RES_OK); + + f2_normalize(attr_normal.value, attr_normal.value); + + switch(prim.prim_id) { + case 0: f2(P, -1.f*s + (1-s)*1.f, -1.f); f2(N, 0.f, 1.f); break; + case 1: f2(P, -1.f, 1.f*s + (1-s)*-1.f); f2(N, 1.f, 0.f); break; + case 2: f2(P, 1.f*s + (1-s)* -1.f, 1.f); f2(N, 0.f,-1.f); break; + case 3: f2(P, 1.f, -1.f*s + (1-s)* 1.f); f2(N,-1.f, 0.f); break; + default: CHECK(0, 1); break; /* Invalid primitive id */ + } + + CHECK(f2_eq_eps(P, attr_position.value, 1.e-6f), 1); + CHECK(f2_eq_eps(N, attr_normal.value, 1.e-6f), 1); + } + + CHECK(s2d_scene_end_session(scn), RES_OK); + + CHECK(s2d_scene_begin_session(scn, S2D_TRACE), RES_OK); + CHECK(s2d_scene_sample(scn, 0, 0, &prim, &s), RES_BAD_OP); + CHECK(s2d_scene_end_session(scn), RES_OK); + + CHECK(s2d_scene_begin_session(scn, S2D_SAMPLE), RES_OK); + FOR_EACH(i, 0, NSAMPS) { + struct s2d_attrib attr; + const float u = rand_canonic(); + const float v = rand_canonic(); + float N[2]; + + CHECK(s2d_scene_sample(scn, u, v, &prim, &s), RES_OK); + CHECK(S2D_PRIMITIVE_EQ(&prim, &S2D_PRIMITIVE_NULL), 0); + CHECK(prim.prim_id < 4, 1); + CHECK(prim.geom_id, box_id); + + CHECK(s2d_primitive_get_attrib(&prim, S2D_GEOMETRY_NORMAL, s, &attr), RES_OK); + f2_normalize(attr.value, attr.value); + + switch(prim.prim_id) { + case 0: f2(N, 0.f,-1.f); break; + case 1: f2(N,-1.f, 0.f); break; + case 2: f2(N, 0.f, 1.f); break; + case 3: f2(N, 1.f, 0.f); break; + default: CHECK(0, 1); break; /* Invalid primitive id */ + } + + CHECK(f2_eq_eps(N, attr.value, 1.e-6f), 1); } CHECK(s2d_scene_end_session(scn), RES_OK);