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