star-3d

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

commit 80d0b78d3f92d00bfb20151ecd63a6440673af78
parent 899597781ef5455d59e4652dfe50c30a24928623
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Tue,  6 Sep 2016 11:40:31 +0200

Implement and test the s3d_scene_get_shapes_count function

Diffstat:
Msrc/s3d.h | 5+++++
Msrc/s3d_scene.c | 7+++++++
Msrc/test_s3d_scene.c | 29++++++++++++++++++++++++++++-
3 files changed, 40 insertions(+), 1 deletion(-)

diff --git a/src/s3d.h b/src/s3d.h @@ -268,6 +268,11 @@ s3d_scene_get_device (struct s3d_scene* scn, struct s3d_device** dev); +S3D_API res_T +s3d_scene_get_shapes_count + (struct s3d_scene* scn, + size_t* nshapes); + /******************************************************************************* * Scene view API - State of the scene geometry ******************************************************************************/ diff --git a/src/s3d_scene.c b/src/s3d_scene.c @@ -232,3 +232,10 @@ s3d_scene_get_device(struct s3d_scene* scn, struct s3d_device** dev) return RES_OK; } +res_T +s3d_scene_get_shapes_count(struct s3d_scene* scn, size_t* nshapes) +{ + if(!scn || !nshapes) return RES_BAD_ARG; + *nshapes = htable_shape_size_get(&scn->shapes); + return RES_OK; +} diff --git a/src/test_s3d_scene.c b/src/test_s3d_scene.c @@ -99,7 +99,7 @@ main(int argc, char** argv) struct s3d_shape* shapes[4]; const size_t nshapes = sizeof(shapes)/sizeof(struct s3d_shape*); void* data = (void*)&cbox_walls_desc; - size_t i; + size_t i, n; size_t nprims; float area, volume, lower[3], upper[3]; unsigned id; @@ -119,22 +119,36 @@ main(int argc, char** argv) CHECK(s3d_scene_create(dev, &scn2), RES_OK); CHECK(s3d_scene_create(dev, &scn3), RES_OK); + CHECK(s3d_scene_get_shapes_count(NULL, NULL), RES_BAD_ARG); + CHECK(s3d_scene_get_shapes_count(scn, NULL), RES_BAD_ARG); + CHECK(s3d_scene_get_shapes_count(NULL, &n), RES_BAD_ARG); + CHECK(s3d_scene_get_shapes_count(scn, &n), RES_OK); + CHECK(n, 0); + CHECK(s3d_scene_attach_shape(NULL, NULL), RES_BAD_ARG); CHECK(s3d_scene_attach_shape(scn, NULL), RES_BAD_ARG); CHECK(s3d_scene_attach_shape(NULL, shapes[0]), RES_BAD_ARG); CHECK(s3d_scene_attach_shape(scn, shapes[0]), RES_OK); + CHECK(s3d_scene_get_shapes_count(scn, &n), RES_OK); + CHECK(n, 1); CHECK(s3d_scene_attach_shape(scn, shapes[0]), RES_OK); + CHECK(s3d_scene_get_shapes_count(scn, &n), RES_OK); + CHECK(n, 1); CHECK(s3d_scene_detach_shape(NULL, NULL), RES_BAD_ARG); CHECK(s3d_scene_detach_shape(scn, NULL), RES_BAD_ARG); CHECK(s3d_scene_detach_shape(NULL, shapes[0]), RES_BAD_ARG); CHECK(s3d_scene_detach_shape(scn, shapes[0]), RES_OK); CHECK(s3d_scene_detach_shape(scn, shapes[0]), RES_BAD_ARG); + CHECK(s3d_scene_get_shapes_count(scn, &n), RES_OK); + CHECK(n, 0); FOR_EACH(i, 1, nshapes) { CHECK(s3d_scene_attach_shape(scn, shapes[i]), RES_OK); CHECK(s3d_shape_ref_put(shapes[i]), RES_OK); } + CHECK(s3d_scene_get_shapes_count(scn, &n), RES_OK); + CHECK(n, nshapes - 1); CHECK(s3d_scene_instantiate(NULL, NULL), RES_BAD_ARG); CHECK(s3d_scene_instantiate(scn, NULL), RES_BAD_ARG); @@ -149,11 +163,15 @@ main(int argc, char** argv) CHECK(s3d_scene_clear(NULL), RES_BAD_ARG); CHECK(s3d_scene_clear(scn), RES_OK); + CHECK(s3d_scene_get_shapes_count(scn, &n), RES_OK); + CHECK(n, 0); CHECK(s3d_scene_clear(scn), RES_OK); CHECK(s3d_scene_instantiate(scn, shapes + 2), RES_OK); CHECK(s3d_scene_attach_shape(scn, shapes[2]), RES_BAD_ARG); CHECK(s3d_scene_attach_shape(scn, shapes[0]), RES_OK); + CHECK(s3d_scene_get_shapes_count(scn, &n), RES_OK); + CHECK(n, 1); CHECK(s3d_scene_view_create(scn, S3D_TRACE, &scnview), RES_OK); CHECK(s3d_scene_view_get_mask(scnview, &mask), RES_OK); @@ -174,6 +192,13 @@ main(int argc, char** argv) CHECK(s3d_scene_attach_shape(scn2, shapes[2]), RES_OK); CHECK(s3d_scene_attach_shape(scn3, shapes[1]), RES_OK); + CHECK(s3d_scene_get_shapes_count(scn, &n), RES_OK); + CHECK(n, 1); + CHECK(s3d_scene_get_shapes_count(scn2, &n), RES_OK); + CHECK(n, 2); + CHECK(s3d_scene_get_shapes_count(scn3, &n), RES_OK); + CHECK(n, 1); + CHECK(s3d_scene_view_create(scn2, S3D_SAMPLE|S3D_TRACE, &scnview2), RES_OK); CHECK(s3d_scene_view_create(scn, S3D_SAMPLE, &scnview), RES_OK); CHECK(s3d_scene_view_create(scn3, S3D_SAMPLE, &scnview3), RES_OK); @@ -214,6 +239,8 @@ main(int argc, char** argv) CHECK(s3d_scene_instantiate(scn2, shapes + 3), RES_OK); CHECK(s3d_scene_attach_shape(scn3, shapes[3]), RES_OK); + CHECK(s3d_scene_get_shapes_count(scn3, &n), RES_OK); + CHECK(n, 2); CHECK(s3d_scene_view_create(scn3, S3D_SAMPLE|S3D_TRACE, &scnview3), RES_BAD_ARG); CHECK(s3d_scene_detach_shape(scn, shapes[0]), RES_OK);