star-enclosures-3d

Extract enclosures from 3D geometry
git clone git://git.meso-star.fr/star-enclosures-3d.git
Log | Files | Refs | README | LICENSE

commit 4dbcc9d0894071ffbf63bf1158e2381dc6a0a1c5
parent ce046f006c072e3cbc1ebd75e9926e973d160ebe
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Tue, 17 Apr 2018 15:12:51 +0200

Use a distorded cube in tests when possible.

This causes 2 tests to fail and reveal a bug!

Diffstat:
Msrc/test_senc_cube_behind_cube.c | 12++++++------
Msrc/test_senc_cube_in_cube.c | 12++++++------
Msrc/test_senc_cube_on_cube.c | 15++++++++-------
Msrc/test_senc_descriptor.c | 28++++++++++++++--------------
Msrc/test_senc_enclosure.c | 53++++++++++++++++++++++++++---------------------------
Msrc/test_senc_sample_enclosure.c | 6+++---
Msrc/test_senc_scene.c | 68++++++++++++++++++++++++++++++++++----------------------------------
Msrc/test_senc_utils.h | 18++++++++++++++++--
8 files changed, 113 insertions(+), 99 deletions(-)

diff --git a/src/test_senc_cube_behind_cube.c b/src/test_senc_cube_behind_cube.c @@ -45,8 +45,8 @@ main(int argc, char** argv) ctx.back_media = medium1; /* First cube */ - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL, - box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, NULL, + nvertices, get_position, &ctx) == RES_OK); /* +Z from the first cube, * big enough to prevent rays from the first cube to miss this one */ @@ -54,8 +54,8 @@ main(int argc, char** argv) ctx.scale = 5; /* Second cube */ - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL, - box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, NULL, + nvertices, get_position, &ctx) == RES_OK); CHK(senc_scene_analyze(scn, &desc) == RES_OK); @@ -66,8 +66,8 @@ main(int argc, char** argv) ctx.back_media = medium0; /* Third cube */ - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL, - box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, NULL, + nvertices, get_position, &ctx) == RES_OK); if(desc) CHK(senc_descriptor_ref_put(desc) == RES_OK); desc = NULL; diff --git a/src/test_senc_cube_in_cube.c b/src/test_senc_cube_in_cube.c @@ -47,8 +47,8 @@ main(int argc, char** argv) ctx.back_media = medium1; /* First cube */ - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL, - box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, NULL, + nvertices, get_position, &ctx) == RES_OK); d3(ctx.offset, -1, -1, -1); ctx.scale = 3; @@ -57,8 +57,8 @@ main(int argc, char** argv) ctx.reverse_vrtx = 1; /* Second cube */ - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL, - box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, NULL, + nvertices, get_position, &ctx) == RES_OK); CHK(senc_scene_analyze(scn, &desc) == RES_OK); @@ -72,8 +72,8 @@ main(int argc, char** argv) ctx.back_media = medium0; /* mismatch with cube 2 */ /* Third cube */ - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL, - box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, NULL, + nvertices, get_position, &ctx) == RES_OK); if(desc) CHK(senc_descriptor_ref_put(desc) == RES_OK); desc = NULL; diff --git a/src/test_senc_cube_on_cube.c b/src/test_senc_cube_on_cube.c @@ -59,7 +59,7 @@ main(int argc, char** argv) /* Create the scene */ CHK(senc_scene_create(dev, &scn) == RES_OK); - ctx.positions = box_vertices; + ctx.positions = cube_vertices; /* Need true cubes for cubes #1 and #2 */ ctx.indices = box_indices; ctx.scale = 1; ctx.reverse_vrtx = 0; @@ -72,8 +72,8 @@ main(int argc, char** argv) ctx.back_media = medium0; /* Add cube #1 */ - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, - NULL, box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, + NULL, nvertices, get_position, &ctx) == RES_OK); d3(ctx.offset, 1, 1, 1); ctx.scale = 1; @@ -84,9 +84,10 @@ main(int argc, char** argv) ctx.back_media = medium0; /* Add cube #2 (has a duplicate face with cube #1) */ - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, - NULL, box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, + NULL, nvertices, get_position, &ctx) == RES_OK); + ctx.positions = box_vertices; /* Can use distorded cube for cube #3 */ d3(ctx.offset, 0, 0, 0); ctx.scale = 4; ctx.reverse_vrtx = 1; @@ -97,8 +98,8 @@ main(int argc, char** argv) ctx.back_media = medium1; /* Add cube #3 */ - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, - NULL, box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, + NULL, nvertices, get_position, &ctx) == RES_OK); CHK(senc_scene_analyze(scn, &desc) == RES_OK); diff --git a/src/test_senc_descriptor.c b/src/test_senc_descriptor.c @@ -53,8 +53,8 @@ main(int argc, char** argv) ctx.front_media = medium0; ctx.back_media = medium1; - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL, - box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, NULL, + nvertices, get_position, &ctx) == RES_OK); CHK(senc_scene_analyze(scn, &desc) == RES_OK); @@ -112,15 +112,15 @@ main(int argc, char** argv) CHK(senc_descriptor_get_global_vertices_count(NULL, &count) == RES_BAD_ARG); CHK(senc_descriptor_get_global_vertices_count(desc, NULL) == RES_BAD_ARG); CHK(senc_descriptor_get_global_vertices_count(desc, &count) == RES_OK); - CHK(count == box_nvertices); + CHK(count == nvertices); CHK(senc_descriptor_get_global_triangles_count(NULL, &count) == RES_BAD_ARG); CHK(senc_descriptor_get_global_triangles_count(desc, NULL) == RES_BAD_ARG); CHK(senc_descriptor_get_global_triangles_count(desc, &count) == RES_OK); - CHK(count == box_ntriangles); + CHK(count == ntriangles); CHK(senc_descriptor_get_global_triangle(NULL, 0, indices) == RES_BAD_ARG); - CHK(senc_descriptor_get_global_triangle(NULL, box_ntriangles, indices) + CHK(senc_descriptor_get_global_triangle(NULL, ntriangles, indices) == RES_BAD_ARG); CHK(senc_descriptor_get_global_triangle(desc, 0, NULL) == RES_BAD_ARG); CHK(senc_descriptor_get_global_triangle(desc, 0, indices) == RES_OK); @@ -129,7 +129,7 @@ main(int argc, char** argv) && indices[2] == box_indices[2]); CHK(senc_descriptor_get_global_vertex(NULL, 0, coord) == RES_BAD_ARG); - CHK(senc_descriptor_get_global_vertex(NULL, box_nvertices, coord) + CHK(senc_descriptor_get_global_vertex(NULL, nvertices, coord) == RES_BAD_ARG); CHK(senc_descriptor_get_global_vertex(desc, 0, NULL) == RES_BAD_ARG); CHK(senc_descriptor_get_global_vertex(desc, 0, coord) == RES_OK); @@ -139,7 +139,7 @@ main(int argc, char** argv) CHK(senc_descriptor_get_global_triangle_media(NULL, 0, media) == RES_BAD_ARG); - CHK(senc_descriptor_get_global_triangle_media(NULL, box_nvertices, media) + CHK(senc_descriptor_get_global_triangle_media(NULL, nvertices, media) == RES_BAD_ARG); CHK(senc_descriptor_get_global_triangle_media(desc, 0, NULL) == RES_BAD_ARG); @@ -150,7 +150,7 @@ main(int argc, char** argv) CHK(senc_descriptor_get_global_triangle_enclosures( NULL, 0, enclosures) == RES_BAD_ARG); CHK(senc_descriptor_get_global_triangle_enclosures( - NULL, box_nvertices, enclosures) == RES_BAD_ARG); + NULL, nvertices, enclosures) == RES_BAD_ARG); CHK(senc_descriptor_get_global_triangle_enclosures(desc, 0, NULL) == RES_BAD_ARG); CHK(senc_descriptor_get_global_triangle_enclosures(desc, 0, enclosures) @@ -161,25 +161,25 @@ main(int argc, char** argv) /* Add valid duplicate geometry */ CHK(senc_descriptor_ref_put(desc) == RES_OK); desc = NULL; - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, - NULL, box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, + NULL, nvertices, get_position, &ctx) == RES_OK); CHK(senc_scene_analyze(scn, &desc) == RES_OK); CHK(senc_descriptor_get_global_vertices_count(desc, &count) == RES_OK); /* Duplicate vertices have been replaced */ - CHK(count == box_nvertices); + CHK(count == nvertices); CHK(senc_descriptor_get_global_triangles_count(desc, &count) == RES_OK); /* Duplicate triangles have been replaced */ - CHK(count == box_ntriangles); + CHK(count == ntriangles); /* Add invalid duplicate geometry */ CHK(senc_descriptor_ref_put(desc) == RES_OK); desc = NULL; ctx.front_media = medium1; ctx.back_media = medium0; - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL, - box_nvertices, get_position, &ctx) == RES_BAD_ARG); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, NULL, + nvertices, get_position, &ctx) == RES_BAD_ARG); CHK(senc_scene_ref_put(scn) == RES_OK); CHK(senc_device_ref_put(dev) == RES_OK); diff --git a/src/test_senc_enclosure.c b/src/test_senc_enclosure.c @@ -17,7 +17,6 @@ #include "senc_s3d_wrapper.h" #include "test_senc_utils.h" -#include <rsys/float3.h> #include <rsys/double3.h> #include <star/s3d.h> @@ -70,8 +69,8 @@ main(int argc, char** argv) ctx.front_media = medium0; ctx.back_media = medium1; - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, - NULL, box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, + NULL, nvertices, get_position, &ctx) == RES_OK); CHK(senc_scene_analyze(scn, &desc) == RES_OK); @@ -85,52 +84,52 @@ main(int argc, char** argv) CHK(senc_enclosure_ref_put(enclosure) == RES_OK); CHK(senc_enclosure_get_triangle(NULL, 0, indices[0]) == RES_BAD_ARG); - CHK(senc_enclosure_get_triangle(enclosure, box_ntriangles, indices[0]) + CHK(senc_enclosure_get_triangle(enclosure, ntriangles, indices[0]) == RES_BAD_ARG); CHK(senc_enclosure_get_triangle(enclosure, 0, NULL) == RES_BAD_ARG); - CHK(senc_enclosure_get_triangle(NULL, box_ntriangles, indices[0]) + CHK(senc_enclosure_get_triangle(NULL, ntriangles, indices[0]) == RES_BAD_ARG); CHK(senc_enclosure_get_triangle(NULL, 0, NULL) == RES_BAD_ARG); - CHK(senc_enclosure_get_triangle(enclosure, box_ntriangles, NULL) + CHK(senc_enclosure_get_triangle(enclosure, ntriangles, NULL) == RES_BAD_ARG); - CHK(senc_enclosure_get_triangle(NULL, box_ntriangles, NULL) == RES_BAD_ARG); + CHK(senc_enclosure_get_triangle(NULL, ntriangles, NULL) == RES_BAD_ARG); CHK(senc_enclosure_get_triangle(enclosure, 0, indices[0]) == RES_OK); CHK(senc_enclosure_get_vertex(NULL, 0, vrtx) == RES_BAD_ARG); - CHK(senc_enclosure_get_vertex(enclosure, box_nvertices, vrtx) + CHK(senc_enclosure_get_vertex(enclosure, nvertices, vrtx) == RES_BAD_ARG); CHK(senc_enclosure_get_vertex(enclosure, 0, NULL) == RES_BAD_ARG); - CHK(senc_enclosure_get_vertex(NULL, box_nvertices, vrtx) == RES_BAD_ARG); + CHK(senc_enclosure_get_vertex(NULL, nvertices, vrtx) == RES_BAD_ARG); CHK(senc_enclosure_get_vertex(NULL, 0, NULL) == RES_BAD_ARG); - CHK(senc_enclosure_get_vertex(enclosure, box_nvertices, NULL) + CHK(senc_enclosure_get_vertex(enclosure, nvertices, NULL) == RES_BAD_ARG); - CHK(senc_enclosure_get_vertex(NULL, box_nvertices, NULL) == RES_BAD_ARG); + CHK(senc_enclosure_get_vertex(NULL, nvertices, NULL) == RES_BAD_ARG); CHK(senc_enclosure_get_vertex(enclosure, 0, vrtx) == RES_OK); CHK(senc_enclosure_get_triangle_media(NULL, 0, medium) == RES_BAD_ARG); - CHK(senc_enclosure_get_triangle_media(enclosure, box_ntriangles, medium) + CHK(senc_enclosure_get_triangle_media(enclosure, ntriangles, medium) == RES_BAD_ARG); CHK(senc_enclosure_get_triangle_media(enclosure, 0, NULL) == RES_BAD_ARG); - CHK(senc_enclosure_get_triangle_media(NULL, box_ntriangles, medium) + CHK(senc_enclosure_get_triangle_media(NULL, ntriangles, medium) == RES_BAD_ARG); CHK(senc_enclosure_get_triangle_media(NULL, 0, NULL) == RES_BAD_ARG); - CHK(senc_enclosure_get_triangle_media(enclosure, box_ntriangles, NULL) + CHK(senc_enclosure_get_triangle_media(enclosure, ntriangles, NULL) == RES_BAD_ARG); - CHK(senc_enclosure_get_triangle_media(NULL, box_ntriangles, NULL) + CHK(senc_enclosure_get_triangle_media(NULL, ntriangles, NULL) == RES_BAD_ARG); CHK(senc_enclosure_get_triangle_media(enclosure, 0, medium) == RES_OK); CHK(senc_enclosure_get_triangle_global_id(NULL, 0, &gid) == RES_BAD_ARG); - CHK(senc_enclosure_get_triangle_global_id(enclosure, box_ntriangles, &gid) + CHK(senc_enclosure_get_triangle_global_id(enclosure, ntriangles, &gid) == RES_BAD_ARG); CHK(senc_enclosure_get_triangle_global_id(enclosure, 0, NULL) == RES_BAD_ARG); - CHK(senc_enclosure_get_triangle_global_id(NULL, box_ntriangles, &gid) + CHK(senc_enclosure_get_triangle_global_id(NULL, ntriangles, &gid) == RES_BAD_ARG); CHK(senc_enclosure_get_triangle_global_id(NULL, 0, NULL) == RES_BAD_ARG); - CHK(senc_enclosure_get_triangle_global_id(enclosure, box_ntriangles, NULL) + CHK(senc_enclosure_get_triangle_global_id(enclosure, ntriangles, NULL) == RES_BAD_ARG); - CHK(senc_enclosure_get_triangle_global_id(NULL, box_ntriangles, NULL) + CHK(senc_enclosure_get_triangle_global_id(NULL, ntriangles, NULL) == RES_BAD_ARG); CHK(senc_enclosure_get_triangle_global_id(enclosure, 0, &gid) == RES_OK); @@ -146,9 +145,9 @@ main(int argc, char** argv) CHK(header.enclosure_id == i); CHK(header.enclosed_medium == (i == 0 ? 0U : 1U)); - CHK(header.triangle_count == box_ntriangles); - CHK(header.unique_triangle_count == box_ntriangles); - CHK(header.vertices_count == box_nvertices); + CHK(header.triangle_count == ntriangles); + CHK(header.unique_triangle_count == ntriangles); + CHK(header.vertices_count == nvertices); CHK(header.is_infinite == (i == 0)); FOR_EACH(t, 0, header.triangle_count) { @@ -161,7 +160,7 @@ main(int argc, char** argv) FOR_EACH(i, 0, 2) CHK(senc_descriptor_get_enclosure(desc, i, enclosures + i) == RES_OK); - FOR_EACH(n, 0, box_ntriangles) { + FOR_EACH(n, 0, ntriangles) { /* Read same triangles in both enclosures */ FOR_EACH(i, 0, 2) CHK(senc_enclosure_get_triangle(enclosures[i], n, indices[i]) == RES_OK); @@ -188,8 +187,8 @@ main(int argc, char** argv) ctx.front_media = medium0; ctx.back_media = medium0; - CHK(senc_scene_add_geometry(scn, box_ntriangles - 1, get_indices, get_media, - NULL, box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles - 1, get_indices, get_media, + NULL, nvertices, get_position, &ctx) == RES_OK); CHK(senc_scene_analyze(scn, &desc) == RES_OK); @@ -208,8 +207,8 @@ main(int argc, char** argv) CHK(header.enclosure_id == 0); CHK(header.enclosed_medium == 0); CHK(header.triangle_count == 2 * header.unique_triangle_count); - CHK(header.unique_triangle_count == box_ntriangles - 1); - CHK(header.vertices_count == box_nvertices); + CHK(header.unique_triangle_count == ntriangles - 1); + CHK(header.vertices_count == nvertices); CHK(header.is_infinite == 1); FOR_EACH(t, 0, header.unique_triangle_count) { diff --git a/src/test_senc_sample_enclosure.c b/src/test_senc_sample_enclosure.c @@ -61,7 +61,7 @@ main(int argc, char** argv) /* A 3D cube, but with a hole (incomplete). * 1 single enclosure including both sides of triangles */ - ctx.positions = box_vertices; + ctx.positions = cube_vertices; /* Need a true cube */ ctx.indices = box_indices; ctx.scale = 1; ctx.reverse_vrtx = 0; @@ -70,8 +70,8 @@ main(int argc, char** argv) ctx.front_media = medium0; ctx.back_media = medium0; - CHK(senc_scene_add_geometry(scn, box_ntriangles - 1, get_indices, - get_media, NULL, box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles - 1, get_indices, + get_media, NULL, nvertices, get_position, &ctx) == RES_OK); CHK(senc_scene_analyze(scn, &desc) == RES_OK); diff --git a/src/test_senc_scene.c b/src/test_senc_scene.c @@ -74,29 +74,29 @@ main(int argc, char** argv) ctx.back_media = medium1; ctx.global_ids = gid_face; - CHK(senc_scene_add_geometry(NULL, box_ntriangles, get_indices, get_media, - get_global_id, box_nvertices, get_position, &ctx) == RES_BAD_ARG); + CHK(senc_scene_add_geometry(NULL, ntriangles, get_indices, get_media, + get_global_id, nvertices, get_position, &ctx) == RES_BAD_ARG); CHK(senc_scene_add_geometry(scn, 0, get_indices, get_media, get_global_id, - box_nvertices, get_position, &ctx) == RES_BAD_ARG); - CHK(senc_scene_add_geometry(scn, box_ntriangles, NULL, get_media, - get_global_id, box_nvertices, get_position, &ctx) == RES_BAD_ARG); - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, NULL, - get_global_id, box_nvertices, get_position, &ctx) == RES_BAD_ARG); - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, + nvertices, get_position, &ctx) == RES_BAD_ARG); + CHK(senc_scene_add_geometry(scn, ntriangles, NULL, get_media, + get_global_id, nvertices, get_position, &ctx) == RES_BAD_ARG); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, NULL, + get_global_id, nvertices, get_position, &ctx) == RES_BAD_ARG); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, get_global_id, 0, get_position, &ctx) == RES_BAD_ARG); - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, - get_global_id, box_nvertices, NULL, &ctx) == RES_BAD_ARG); - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, - get_global_id, box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, + get_global_id, nvertices, NULL, &ctx) == RES_BAD_ARG); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, + get_global_id, nvertices, get_position, &ctx) == RES_OK); CHK(senc_scene_get_triangles_count(scn, &count) == RES_OK); - CHK(count == box_ntriangles); + CHK(count == ntriangles); CHK(senc_scene_get_unique_triangles_count(scn, &count) == RES_OK); - CHK(count == box_ntriangles); + CHK(count == ntriangles); CHK(senc_scene_get_vertices_count(scn, &count) == RES_OK); - CHK(count == box_nvertices); + CHK(count == nvertices); CHK(senc_scene_get_unique_vertices_count(scn, &count) == RES_OK); - CHK(count == box_nvertices); + CHK(count == nvertices); CHK(senc_scene_analyze(NULL, NULL) == RES_BAD_ARG); CHK(senc_scene_analyze(scn, NULL) == RES_BAD_ARG); @@ -112,11 +112,11 @@ main(int argc, char** argv) CHK(senc_scene_ref_put(scn) == RES_OK); CHK(senc_descriptor_ref_put(desc) == RES_OK); CHK(senc_scene_create(dev, &scn) == RES_OK); - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, - get_global_id, box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, + get_global_id, nvertices, get_position, &ctx) == RES_OK); CHK(senc_scene_analyze(scn, &desc) == RES_OK); - FOR_EACH(i, 0, box_ntriangles) { + FOR_EACH(i, 0, ntriangles) { unsigned gid; CHK(senc_descriptor_get_global_triangle_global_id(desc, i, &gid) == RES_OK); /* gid has been set to gid_face. */ @@ -126,11 +126,11 @@ main(int argc, char** argv) CHK(senc_scene_ref_put(scn) == RES_OK); CHK(senc_descriptor_ref_put(desc) == RES_OK); CHK(senc_scene_create(dev, &scn) == RES_OK); - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL, - box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, NULL, + nvertices, get_position, &ctx) == RES_OK); CHK(senc_scene_analyze(scn, &desc) == RES_OK); - FOR_EACH(i, 0, box_ntriangles) { + FOR_EACH(i, 0, ntriangles) { unsigned gid; CHK(senc_descriptor_get_global_triangle_global_id(desc, i, &gid) == RES_OK); /* Default gid: triangle rank. */ @@ -138,36 +138,36 @@ main(int argc, char** argv) } /* Invalid vertex ID */ - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL, - box_nvertices - 1, get_position, &ctx) == RES_BAD_ARG); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, NULL, + nvertices - 1, get_position, &ctx) == RES_BAD_ARG); /* Incoherent medium on a duplicate triangle */ ctx.back_media = medium1_3; - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL, - box_nvertices, get_position, &ctx) == RES_BAD_ARG); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, NULL, + nvertices, get_position, &ctx) == RES_BAD_ARG); /* It is OK dd geometry after a failed add */ ctx.back_media = medium1; - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL, - box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, NULL, + nvertices, get_position, &ctx) == RES_OK); /* Coherent medium on duplicate triangle */ ctx.back_media = medium1; - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL, - box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, NULL, + nvertices, get_position, &ctx) == RES_OK); /* Coherent medium on duplicate triangle V2 */ ctx.reverse_med = 1; ctx.front_media = medium1; ctx.back_media = medium0; - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL, - box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, NULL, + nvertices, get_position, &ctx) == RES_OK); /* Coherent medium on duplicate triangle V3 */ ctx.reverse_med = 0; ctx.reverse_vrtx = 1; - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL, - box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_add_geometry(scn, ntriangles, get_indices, get_media, NULL, + nvertices, get_position, &ctx) == RES_OK); CHK(senc_scene_ref_put(scn) == RES_OK); CHK(senc_device_ref_put(dev) == RES_OK); diff --git a/src/test_senc_utils.h b/src/test_senc_utils.h @@ -24,7 +24,19 @@ /******************************************************************************* * Geometry ******************************************************************************/ +/* Distorded cube */ static const double box_vertices[8/*#vertices*/*3/*#coords per vertex*/] = { + 0.1, 0.0, 0.0, + 1.0, 0.0, 0.0, + 0.0, 1.0, 0.0, + 1.0, 1.0, 0.0, + 0.0, 0.0, 1.1, + 1.0, 0.0, 1.0, + 0.0, 1.0, 1.0, + 1.0, 1.1, 1.0 +}; +/* Need a true cube for some tests */ +static const double cube_vertices[8/*#vertices*/ * 3/*#coords per vertex*/] = { 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, @@ -34,7 +46,9 @@ static const double box_vertices[8/*#vertices*/*3/*#coords per vertex*/] = { 0.0, 1.0, 1.0, 1.0, 1.0, 1.0 }; -static const unsigned box_nvertices = sizeof(box_vertices) / sizeof(double[3]); +static const unsigned nvertices = sizeof(box_vertices) / sizeof(double[3]); +STATIC_ASSERT(sizeof(box_vertices) == sizeof(cube_vertices), + The_2_geometries_must_have_the_same_number_of_vertices); /* The following array lists the indices toward the 3D vertices of each * triangle. @@ -56,7 +70,7 @@ box_indices[12/*#triangles*/*3/*#indices per triangle*/] = { 0, 1, 4, 4, 1, 5 /* Bottom face */ }; static const unsigned -box_ntriangles = sizeof(box_indices) / (3 * sizeof(*box_indices)); +ntriangles = sizeof(box_indices) / (3 * sizeof(*box_indices)); struct context { const double* positions;