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:
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);