star-enclosures-2d

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

commit 290716a4bca6200bcfb04f784fb753e45e979a30
parent 323f0953ec36f4d849cbf3435ae83a0c9482e4fb
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Thu, 12 Apr 2018 14:24:21 +0200

API change: remove the need to give #media when creating a scene.

Diffstat:
Msrc/senc2d.h | 1-
Msrc/senc2d_scene.c | 20++++++--------------
Msrc/test_senc2d_descriptor.c | 2+-
Msrc/test_senc2d_enclosure.c | 4++--
Msrc/test_senc2d_many_enclosures.c | 2+-
Msrc/test_senc2d_many_segments.c | 2+-
Msrc/test_senc2d_sample_enclosure.c | 2+-
Msrc/test_senc2d_scene.c | 23++++++-----------------
Msrc/test_senc2d_square_behind_square.c | 2+-
Msrc/test_senc2d_square_in_square.c | 2+-
Msrc/test_senc2d_square_on_square.c | 2+-
Msrc/test_senc2d_utils.h | 1-
12 files changed, 21 insertions(+), 42 deletions(-)

diff --git a/src/senc2d.h b/src/senc2d.h @@ -104,7 +104,6 @@ senc2d_device_ref_put SENC2D_API res_T senc2d_scene_create (struct senc2d_device* device, - const unsigned media_count, struct senc2d_scene** scene); /* Add a new set of vertices and segments to the scene. diff --git a/src/senc2d_scene.c b/src/senc2d_scene.c @@ -48,14 +48,12 @@ scene_release(ref_T * ref) res_T senc2d_scene_create (struct senc2d_device* dev, - const unsigned nmeds, struct senc2d_scene** out_scn) { struct senc2d_scene* scn = NULL; res_T res = RES_OK; - if(!dev || !out_scn || !nmeds || nmeds > MEDIUM_MAX__) - return RES_BAD_ARG; + if(!dev || !out_scn) return RES_BAD_ARG; scn = MEM_CALLOC(dev->allocator, 1, sizeof(struct senc2d_scene)); if(!scn) { @@ -69,7 +67,7 @@ senc2d_scene_create scn->ngeoms = 0; scn->nsegs = 0; scn->nusegs = 0; - scn->nmeds = (medium_id_t)nmeds; + scn->nmeds = 0; scn->nverts = 0; scn->nuverts = 0; darray_segment_in_init(dev->allocator, &scn->segments_in); @@ -77,7 +75,6 @@ senc2d_scene_create htable_vrtx_init(dev->allocator, &scn->unique_vertices); htable_seg_init(dev->allocator, &scn->unique_segments); darray_side_range_init(dev->allocator, &scn->media_use); - darray_side_range_resize(&scn->media_use, nmeds); exit: if(scn) *out_scn = scn; @@ -191,17 +188,12 @@ senc2d_scene_add_geometry } /* Get media */ media(i, med, ctx); /* API: media needs an unsigned */ - ASSERT(scn->nmeds <= MEDIUM_MAX__); FOR_EACH(j, 0, 2) { if(med[j] >= scn->nmeds) { - log_err(scn->dev, - "%s: segment %lu %s side references invalid medium: %lu.\n", - FUNC_NAME, - (unsigned long)tmp.global_id, - (j ? "back" : "front"), - (unsigned long)med[j]); - res = RES_BAD_ARG; - goto error; + /* New medium */ + ASSERT(med[j] <= MEDIUM_MAX__); + scn->nmeds = 1 + med[j]; + darray_side_range_resize(&scn->media_use, scn->nmeds); } tmp.medium[j] = (medium_id_t)med[j]; } diff --git a/src/test_senc2d_descriptor.c b/src/test_senc2d_descriptor.c @@ -41,7 +41,7 @@ main(int argc, char** argv) CHK(senc2d_device_create(NULL, &allocator, SENC2D_NTHREADS_DEFAULT, 1, &dev) == RES_OK); - CHK(senc2d_scene_create(dev, 2, &scn) == RES_OK); + CHK(senc2d_scene_create(dev, &scn) == RES_OK); /* A 2D square */ ctx.positions = square_vertices; diff --git a/src/test_senc2d_enclosure.c b/src/test_senc2d_enclosure.c @@ -48,7 +48,7 @@ main(int argc, char** argv) CHK(senc2d_device_create(NULL, &allocator, SENC2D_NTHREADS_DEFAULT, 1, &dev) == RES_OK); - CHK(senc2d_scene_create(dev, 2, &scn) == RES_OK); + CHK(senc2d_scene_create(dev, &scn) == RES_OK); s2d_attribs.type = S2D_FLOAT2; s2d_attribs.usage = S2D_POSITION; @@ -178,7 +178,7 @@ main(int argc, char** argv) /* Same 2D square, but with a hole (incomplete). * 1 single enclosure including both sides of segments */ - CHK(senc2d_scene_create(dev, 2, &scn) == RES_OK); + CHK(senc2d_scene_create(dev, &scn) == RES_OK); ctx.positions = square_vertices; ctx.indices = square_indices; diff --git a/src/test_senc2d_many_enclosures.c b/src/test_senc2d_many_enclosures.c @@ -76,7 +76,7 @@ main(int argc, char** argv) /* 64^3 = 262144 circles */ #define NB_CIRC (NB_CIRC_1 * NB_CIRC_1 * NB_CIRC_1) /* Create the scene */ - CHK(senc2d_scene_create(dev, NB_CIRC_1 + 1, &scn) == RES_OK); + CHK(senc2d_scene_create(dev, &scn) == RES_OK); ctx.positions = NULL; ctx.indices = NULL; diff --git a/src/test_senc2d_many_segments.c b/src/test_senc2d_many_segments.c @@ -73,7 +73,7 @@ main(int argc, char** argv) #define NB_CIRC 4 /* Create the scene */ - CHK(senc2d_scene_create(dev, NB_CIRC+1, &scn) == RES_OK); + CHK(senc2d_scene_create(dev, &scn) == RES_OK); ctx.positions = NULL; ctx.indices = NULL; diff --git a/src/test_senc2d_sample_enclosure.c b/src/test_senc2d_sample_enclosure.c @@ -48,7 +48,7 @@ main(int argc, char** argv) CHK(senc2d_device_create(NULL, &allocator, SENC2D_NTHREADS_DEFAULT, 1, &dev) == RES_OK); - CHK(senc2d_scene_create(dev, 2, &scn) == RES_OK); + CHK(senc2d_scene_create(dev, &scn) == RES_OK); vrtx_get.type = S2D_FLOAT2; vrtx_get.usage = S2D_POSITION; diff --git a/src/test_senc2d_scene.c b/src/test_senc2d_scene.c @@ -36,15 +36,10 @@ main(int argc, char** argv) CHK(senc2d_device_create(NULL, &allocator, SENC2D_NTHREADS_DEFAULT, 1, &dev) == RES_OK); - CHK(senc2d_scene_create(NULL, 2, &scn) == RES_BAD_ARG); - CHK(senc2d_scene_create(dev, 0, &scn) == RES_BAD_ARG); - CHK(senc2d_scene_create(dev, 2, NULL) == RES_BAD_ARG); - CHK(senc2d_scene_create(NULL, 0, &scn) == RES_BAD_ARG); - CHK(senc2d_scene_create(NULL, 2, NULL) == RES_BAD_ARG); - CHK(senc2d_scene_create(dev, 0, NULL) == RES_BAD_ARG); - CHK(senc2d_scene_create(NULL, 0, NULL) == RES_BAD_ARG); - /* It is valid to have unused media */ - CHK(senc2d_scene_create(dev, 4, &scn) == RES_OK); + CHK(senc2d_scene_create(NULL, &scn) == RES_BAD_ARG); + CHK(senc2d_scene_create(dev, NULL) == RES_BAD_ARG); + CHK(senc2d_scene_create(NULL, NULL) == RES_BAD_ARG); + CHK(senc2d_scene_create(dev, &scn) == RES_OK); CHK(senc2d_scene_get_segments_count(NULL, &count) == RES_BAD_ARG); CHK(senc2d_scene_get_segments_count(scn, NULL) == RES_BAD_ARG); @@ -118,7 +113,7 @@ main(int argc, char** argv) CHK(senc2d_scene_ref_put(scn) == RES_OK); CHK(senc2d_descriptor_ref_put(desc) == RES_OK); - CHK(senc2d_scene_create(dev, 4, &scn) == RES_OK); + CHK(senc2d_scene_create(dev, &scn) == RES_OK); CHK(senc2d_scene_add_geometry(scn, square_nsegments, get_indices, get_media, get_global_id, square_nvertices, get_position, &ctx) == RES_OK); CHK(senc2d_scene_analyze(scn, &desc) == RES_OK); @@ -132,7 +127,7 @@ main(int argc, char** argv) CHK(senc2d_scene_ref_put(scn) == RES_OK); CHK(senc2d_descriptor_ref_put(desc) == RES_OK); - CHK(senc2d_scene_create(dev, 4, &scn) == RES_OK); + CHK(senc2d_scene_create(dev, &scn) == RES_OK); CHK(senc2d_scene_add_geometry(scn, square_nsegments, get_indices, get_media, NULL, square_nvertices, get_position, &ctx) == RES_OK); CHK(senc2d_scene_analyze(scn, &desc) == RES_OK); @@ -144,12 +139,6 @@ main(int argc, char** argv) CHK(gid == i); } - /* Invalid medium ID */ - ctx.back_media = medium1_12; - CHK(senc2d_scene_add_geometry(scn, square_nsegments, get_indices, get_media, NULL, - square_nvertices, get_position, &ctx) == RES_BAD_ARG); - ctx.back_media = medium1; - /* Invalid vertex ID */ CHK(senc2d_scene_add_geometry(scn, square_nsegments, get_indices, get_media, NULL, square_nvertices - 1, get_position, &ctx) == RES_BAD_ARG); diff --git a/src/test_senc2d_square_behind_square.c b/src/test_senc2d_square_behind_square.c @@ -33,7 +33,7 @@ main(int argc, char** argv) (NULL, &allocator, 1/*SENC2D_NTHREADS_DEFAULT*/, 1, &dev) == RES_OK); /* Create the scene */ - CHK(senc2d_scene_create(dev, 2, &scn) == RES_OK); + CHK(senc2d_scene_create(dev, &scn) == RES_OK); ctx.positions = square_vertices; ctx.indices = square_indices; diff --git a/src/test_senc2d_square_in_square.c b/src/test_senc2d_square_in_square.c @@ -33,7 +33,7 @@ main(int argc, char** argv) (NULL, &allocator, 2/*SENC2D_NTHREADS_DEFAULT*/, 1, &dev) == RES_OK); /* Create the scene */ - CHK(senc2d_scene_create(dev, 2, &scn) == RES_OK); + CHK(senc2d_scene_create(dev, &scn) == RES_OK); ctx.positions = square_vertices; ctx.indices = square_indices; diff --git a/src/test_senc2d_square_on_square.c b/src/test_senc2d_square_on_square.c @@ -57,7 +57,7 @@ main(int argc, char** argv) (NULL, &allocator, SENC2D_NTHREADS_DEFAULT, 1, &dev) == RES_OK); /* Create the scene */ - CHK(senc2d_scene_create(dev, 3, &scn) == RES_OK); + CHK(senc2d_scene_create(dev, &scn) == RES_OK); ctx.positions = square_vertices; ctx.indices = square_indices; diff --git a/src/test_senc2d_utils.h b/src/test_senc2d_utils.h @@ -67,7 +67,6 @@ static const unsigned medium0[4] = { 0, 0, 0, 0 }; static const unsigned medium1[4] = { 1, 1, 1, 1 }; static const unsigned medium2[4] = { 2, 2, 2, 2 }; static const unsigned medium1_3[4] = { 1, 1, 3, 1 }; -static const unsigned medium1_12[4] = { 1, 12, 1, 1 }; static const unsigned medium1_back0[4] = { 1, 1, 1, 0 }; static const unsigned medium1_front0[4] = { 1, 0, 1, 1 };