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 4f21c3b2bf5840f8bd12575a2c7aac92a9c288ed
parent f8844125ffaa54e3dd7fd4fd7de098b09c5afd57
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Thu, 12 Apr 2018 15:04:29 +0200

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

Diffstat:
Msrc/senc.h | 1-
Msrc/senc_scene.c | 18+++++-------------
Msrc/test_senc_cube_behind_cube.c | 2+-
Msrc/test_senc_cube_in_cube.c | 2+-
Msrc/test_senc_cube_on_cube.c | 2+-
Msrc/test_senc_descriptor.c | 2+-
Msrc/test_senc_enclosure.c | 4++--
Msrc/test_senc_many_enclosures.c | 2+-
Msrc/test_senc_many_triangles.c | 2+-
Msrc/test_senc_sample_enclosure.c | 2+-
Msrc/test_senc_scene.c | 23++++++-----------------
Msrc/test_senc_utils.h | 1-
12 files changed, 20 insertions(+), 41 deletions(-)

diff --git a/src/senc.h b/src/senc.h @@ -104,7 +104,6 @@ senc_device_ref_put SENC_API res_T senc_scene_create (struct senc_device* device, - const unsigned media_count, struct senc_scene** scene); /* Add a new set of vertices and triangles to the scene. diff --git a/src/senc_scene.c b/src/senc_scene.c @@ -48,13 +48,12 @@ scene_release(ref_T * ref) res_T senc_scene_create (struct senc_device* dev, - const unsigned nmeds, struct senc_scene** out_scn) { struct senc_scene* scn = NULL; res_T res = RES_OK; - if(!dev || !out_scn || !nmeds || nmeds > MEDIUM_MAX__) + if(!dev || !out_scn) return RES_BAD_ARG; scn = MEM_CALLOC(dev->allocator, 1, sizeof(struct senc_scene)); @@ -69,7 +68,7 @@ senc_scene_create scn->ngeoms = 0; scn->ntris = 0; scn->nutris = 0; - scn->nmeds = (medium_id_t)nmeds; + scn->nmeds = 0; scn->nverts = 0; scn->nuverts = 0; darray_triangle_in_init(dev->allocator, &scn->triangles_in); @@ -77,7 +76,6 @@ senc_scene_create htable_vrtx_init(dev->allocator, &scn->unique_vertices); htable_trg_init(dev->allocator, &scn->unique_triangles); darray_side_range_init(dev->allocator, &scn->media_use); - darray_side_range_resize(&scn->media_use, nmeds); exit: if(scn) *out_scn = scn; @@ -194,17 +192,11 @@ senc_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: triangle %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; + ASSERT(med[j] <= MEDIUM_MAX__); + scn->nmeds = med[j] + 1; + darray_side_range_resize(&scn->media_use, scn->nmeds); } tmp.medium[j] = (medium_id_t)med[j]; } diff --git a/src/test_senc_cube_behind_cube.c b/src/test_senc_cube_behind_cube.c @@ -33,7 +33,7 @@ main(int argc, char** argv) (NULL, &allocator, SENC_NTHREADS_DEFAULT, 1, &dev) == RES_OK); /* Create the scene */ - CHK(senc_scene_create(dev, 2, &scn) == RES_OK); + CHK(senc_scene_create(dev, &scn) == RES_OK); ctx.positions = box_vertices; ctx.indices = box_indices; diff --git a/src/test_senc_cube_in_cube.c b/src/test_senc_cube_in_cube.c @@ -33,7 +33,7 @@ main(int argc, char** argv) (NULL, &allocator, SENC_NTHREADS_DEFAULT, 1, &dev) == RES_OK); /* Create the scene */ - CHK(senc_scene_create(dev, 2, &scn) == RES_OK); + CHK(senc_scene_create(dev, &scn) == RES_OK); ctx.positions = box_vertices; ctx.indices = box_indices; diff --git a/src/test_senc_cube_on_cube.c b/src/test_senc_cube_on_cube.c @@ -57,7 +57,7 @@ main(int argc, char** argv) (NULL, &allocator, SENC_NTHREADS_DEFAULT, 1, &dev) == RES_OK); /* Create the scene */ - CHK(senc_scene_create(dev, 3, &scn) == RES_OK); + CHK(senc_scene_create(dev, &scn) == RES_OK); ctx.positions = box_vertices; ctx.indices = box_indices; diff --git a/src/test_senc_descriptor.c b/src/test_senc_descriptor.c @@ -41,7 +41,7 @@ main(int argc, char** argv) CHK(senc_device_create(NULL, &allocator, SENC_NTHREADS_DEFAULT, 1, &dev) == RES_OK); - CHK(senc_scene_create(dev, 2, &scn) == RES_OK); + CHK(senc_scene_create(dev, &scn) == RES_OK); /* A 3D cube */ ctx.positions = box_vertices; diff --git a/src/test_senc_enclosure.c b/src/test_senc_enclosure.c @@ -48,7 +48,7 @@ main(int argc, char** argv) CHK(senc_device_create(NULL, &allocator, SENC_NTHREADS_DEFAULT, 1, &dev) == RES_OK); - CHK(senc_scene_create(dev, 2, &scn) == RES_OK); + CHK(senc_scene_create(dev, &scn) == RES_OK); s3d_attribs.type = S3D_FLOAT3; s3d_attribs.usage = S3D_POSITION; @@ -179,7 +179,7 @@ main(int argc, char** argv) /* Same 3D cube, but with a hole (incomplete). * 1 single enclosure including both sides of triangles */ - CHK(senc_scene_create(dev, 2, &scn) == RES_OK); + CHK(senc_scene_create(dev, &scn) == RES_OK); ctx.positions = box_vertices; ctx.indices = box_indices; diff --git a/src/test_senc_many_enclosures.c b/src/test_senc_many_enclosures.c @@ -90,7 +90,7 @@ main(int argc, char** argv) /* 64^3 = 262144 cylinders */ #define NB_CYL (NB_CYL_1 * NB_CYL_1 * NB_CYL_1) /* Create the scene */ - CHK(senc_scene_create(dev, NB_CYL_1 + 1, &scn) == RES_OK); + CHK(senc_scene_create(dev, &scn) == RES_OK); ctx.ctx.positions = NULL; ctx.ctx.indices = NULL; diff --git a/src/test_senc_many_triangles.c b/src/test_senc_many_triangles.c @@ -87,7 +87,7 @@ main(int argc, char** argv) #define NB_CYL 4 /* Create the scene */ - CHK(senc_scene_create(dev, NB_CYL+1, &scn) == RES_OK); + CHK(senc_scene_create(dev, &scn) == RES_OK); ctx.ctx.positions = NULL; ctx.ctx.indices = NULL; diff --git a/src/test_senc_sample_enclosure.c b/src/test_senc_sample_enclosure.c @@ -48,7 +48,7 @@ main(int argc, char** argv) CHK(senc_device_create(NULL, &allocator, SENC_NTHREADS_DEFAULT, 1, &dev) == RES_OK); - CHK(senc_scene_create(dev, 2, &scn) == RES_OK); + CHK(senc_scene_create(dev, &scn) == RES_OK); vrtx_get.type = S3D_FLOAT3; vrtx_get.usage = S3D_POSITION; diff --git a/src/test_senc_scene.c b/src/test_senc_scene.c @@ -34,15 +34,10 @@ main(int argc, char** argv) CHK(senc_device_create(NULL, &allocator, SENC_NTHREADS_DEFAULT, 1, &dev) == RES_OK); - CHK(senc_scene_create(NULL, 2, &scn) == RES_BAD_ARG); - CHK(senc_scene_create(dev, 0, &scn) == RES_BAD_ARG); - CHK(senc_scene_create(dev, 2, NULL) == RES_BAD_ARG); - CHK(senc_scene_create(NULL, 0, &scn) == RES_BAD_ARG); - CHK(senc_scene_create(NULL, 2, NULL) == RES_BAD_ARG); - CHK(senc_scene_create(dev, 0, NULL) == RES_BAD_ARG); - CHK(senc_scene_create(NULL, 0, NULL) == RES_BAD_ARG); - /* It is valid to have unused media */ - CHK(senc_scene_create(dev, 4, &scn) == RES_OK); + CHK(senc_scene_create(NULL, &scn) == RES_BAD_ARG); + CHK(senc_scene_create(dev, NULL) == RES_BAD_ARG); + CHK(senc_scene_create(NULL, NULL) == RES_BAD_ARG); + CHK(senc_scene_create(dev, &scn) == RES_OK); CHK(senc_scene_get_triangles_count(NULL, &count) == RES_BAD_ARG); CHK(senc_scene_get_triangles_count(scn, NULL) == RES_BAD_ARG); @@ -116,7 +111,7 @@ 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, 4, &scn) == 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_analyze(scn, &desc) == RES_OK); @@ -130,7 +125,7 @@ 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, 4, &scn) == 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_analyze(scn, &desc) == RES_OK); @@ -142,12 +137,6 @@ main(int argc, char** argv) CHK(gid == i); } - /* Invalid medium ID */ - ctx.back_media = medium1_12; - CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, NULL, - box_nvertices, get_position, &ctx) == RES_BAD_ARG); - ctx.back_media = medium1; - /* 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); diff --git a/src/test_senc_utils.h b/src/test_senc_utils.h @@ -73,7 +73,6 @@ static const unsigned medium0[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const unsigned medium1[12] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; static const unsigned medium2[12] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }; static const unsigned medium1_3[12] = { 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1 }; -static const unsigned medium1_12[12] = { 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1 }; static const unsigned medium1_back0[12] = { 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1 }; static const unsigned medium1_front0[12] = { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };