commit fbf6bbb57d066d51279b9d1ff5c17e127d3ece8b
parent 6173ec407affbda1fde1c2f1637835816e9105db
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Mon, 19 Feb 2018 11:41:33 +0100
Given access to scene counts through new API calls.
Diffstat:
3 files changed, 94 insertions(+), 0 deletions(-)
diff --git a/src/senc.h b/src/senc.h
@@ -125,6 +125,26 @@ senc_scene_analyze
struct senc_descriptor** descriptor);
SENC_API res_T
+senc_scene_get_triangles_count
+ (const struct senc_scene* scene,
+ unsigned* count);
+
+SENC_API res_T
+senc_scene_get_unique_triangles_count
+ (const struct senc_scene* scene,
+ unsigned* count);
+
+SENC_API res_T
+senc_scene_get_vertices_count
+ (const struct senc_scene* scene,
+ unsigned* count);
+
+SENC_API res_T
+senc_scene_get_unique_vertices_count
+ (const struct senc_scene* scene,
+ unsigned* count);
+
+SENC_API res_T
senc_scene_ref_get
(struct senc_scene* scene);
diff --git a/src/senc_scene.c b/src/senc_scene.c
@@ -261,6 +261,46 @@ error:
}
res_T
+senc_scene_get_triangles_count
+ (const struct senc_scene* scn,
+ unsigned* count)
+{
+ if(!scn || !count) return RES_BAD_ARG;
+ *count = scn->ntris;
+ return RES_OK;
+}
+
+res_T
+senc_scene_get_unique_triangles_count
+ (const struct senc_scene* scn,
+ unsigned* count)
+{
+ if(!scn || !count) return RES_BAD_ARG;
+ *count = scn->nutris;
+ return RES_OK;
+}
+
+res_T
+senc_scene_get_vertices_count
+ (const struct senc_scene* scn,
+ unsigned* count)
+{
+ if(!scn || !count) return RES_BAD_ARG;
+ *count = scn->nverts;
+ return RES_OK;
+}
+
+res_T
+senc_scene_get_unique_vertices_count
+ (const struct senc_scene* scn,
+ unsigned* count)
+{
+ if(!scn || !count) return RES_BAD_ARG;
+ *count = scn->nuverts;
+ return RES_OK;
+}
+
+res_T
senc_scene_ref_get(struct senc_scene* scn)
{
if(!scn) return RES_BAD_ARG;
diff --git a/src/test_senc_scene.c b/src/test_senc_scene.c
@@ -29,6 +29,7 @@ main(int argc, char** argv)
struct senc_scene* scn = NULL;
struct senc_descriptor* desc = NULL;
struct context ctx;
+ unsigned count;
(void)argc, (void)argv;
CHK(mem_init_proxy_allocator(&allocator, &mem_default_allocator) == RES_OK);
@@ -45,6 +46,30 @@ main(int argc, char** argv)
/* It is valid to have unused media */
CHK(senc_scene_create(dev, 4, &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);
+ CHK(senc_scene_get_triangles_count(NULL, NULL) == RES_BAD_ARG);
+ CHK(senc_scene_get_triangles_count(scn, &count) == RES_OK);
+ CHK(count == 0);
+
+ CHK(senc_scene_get_unique_triangles_count(NULL, &count) == RES_BAD_ARG);
+ CHK(senc_scene_get_unique_triangles_count(scn, NULL) == RES_BAD_ARG);
+ CHK(senc_scene_get_unique_triangles_count(NULL, NULL) == RES_BAD_ARG);
+ CHK(senc_scene_get_unique_triangles_count(scn, &count) == RES_OK);
+ CHK(count == 0);
+
+ CHK(senc_scene_get_vertices_count(NULL, &count) == RES_BAD_ARG);
+ CHK(senc_scene_get_vertices_count(scn, NULL) == RES_BAD_ARG);
+ CHK(senc_scene_get_vertices_count(NULL, NULL) == RES_BAD_ARG);
+ CHK(senc_scene_get_vertices_count(scn, &count) == RES_OK);
+ CHK(count == 0);
+
+ CHK(senc_scene_get_unique_vertices_count(NULL, &count) == RES_BAD_ARG);
+ CHK(senc_scene_get_unique_vertices_count(scn, NULL) == RES_BAD_ARG);
+ CHK(senc_scene_get_unique_vertices_count(NULL, NULL) == RES_BAD_ARG);
+ CHK(senc_scene_get_unique_vertices_count(scn, &count) == RES_OK);
+ CHK(count == 0);
+
/* A 3D cube */
ctx.positions = box_vertices;
ctx.indices = box_indices;
@@ -70,6 +95,15 @@ main(int argc, char** argv)
CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media,
box_nvertices, get_position, &ctx) == RES_OK);
+ CHK(senc_scene_get_triangles_count(scn, &count) == RES_OK);
+ CHK(count == box_ntriangles);
+ CHK(senc_scene_get_unique_triangles_count(scn, &count) == RES_OK);
+ CHK(count == box_ntriangles);
+ CHK(senc_scene_get_vertices_count(scn, &count) == RES_OK);
+ CHK(count == box_nvertices);
+ CHK(senc_scene_get_unique_vertices_count(scn, &count) == RES_OK);
+ CHK(count == box_nvertices);
+
CHK(senc_scene_analyze(NULL, NULL) == RES_BAD_ARG);
CHK(senc_scene_analyze(scn, NULL) == RES_BAD_ARG);
CHK(senc_scene_analyze(NULL, &desc) == RES_BAD_ARG);