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 4dea3b9c2039de99fc854aab44740e7dddc8e806
parent 147763bfa562a00c043b1af31207e278c11f6636
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Tue,  1 Oct 2019 13:59:32 +0200

The s3d_scene_view_create can now have a null mask

Such scene view can be used to compute the volume or the area of the
scene.

Diffstat:
Msrc/s3d_scene_view.c | 9---------
Msrc/test_s3d_scene_view.c | 12+++++++++++-
2 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/src/s3d_scene_view.c b/src/s3d_scene_view.c @@ -1023,7 +1023,6 @@ scene_view_sync res_T res = RES_OK; ASSERT(scnview && accel_struct_conf); - ASSERT((mask & (S3D_TRACE|S3D_SAMPLE|S3D_GET_PRIMITIVE)) != 0); /* Commit the scene shape to the scnview */ htable_shape_begin(&scnview->scn->shapes, &it); @@ -1210,14 +1209,6 @@ s3d_scene_view_create2 accel_struct_conf = &S3D_ACCEL_STRUCT_CONF_DEFAULT; } - if(!(mask & S3D_TRACE) - && !(mask & S3D_SAMPLE) - && !(mask & S3D_GET_PRIMITIVE)) { - log_error(scn->dev, "%s: no valid scene view mask is defined.\n", FUNC_NAME); - res = RES_BAD_ARG; - goto error; - } - res = scene_view_create(scn, &scnview); if(res != RES_OK) goto error; diff --git a/src/test_s3d_scene_view.c b/src/test_s3d_scene_view.c @@ -131,6 +131,8 @@ test_miscellaneous { struct s3d_scene* scn; struct s3d_scene_view* scnview; + float V; + float A; int mask; CHK(s3d_scene_create(dev, &scn) == RES_OK); @@ -142,7 +144,6 @@ test_miscellaneous CHK(s3d_scene_view_create(NULL, S3D_SAMPLE, NULL) == RES_BAD_ARG); CHK(s3d_scene_view_create(scn, S3D_SAMPLE, NULL) == RES_BAD_ARG); CHK(s3d_scene_view_create(NULL, 0, &scnview) == RES_BAD_ARG); - CHK(s3d_scene_view_create(scn, 0, &scnview) == RES_BAD_ARG); CHK(s3d_scene_view_create(NULL, S3D_SAMPLE, &scnview) == RES_BAD_ARG); CHK(s3d_scene_view_create(scn, S3D_SAMPLE, &scnview) == RES_OK); @@ -170,6 +171,15 @@ test_miscellaneous CHK((mask & S3D_GET_PRIMITIVE) == S3D_GET_PRIMITIVE); CHK(s3d_scene_view_ref_put(scnview) == RES_OK); + CHK(s3d_scene_detach_shape(scn, plane) == RES_OK); + CHK(s3d_scene_view_create(scn, 0, &scnview) == RES_OK); + CHK(s3d_scene_view_get_mask(scnview, &mask) == RES_OK); + CHK(mask == 0); + CHK(s3d_scene_view_compute_volume(scnview, &V) == RES_OK); + CHK(s3d_scene_view_compute_volume(scnview, &A) == RES_OK); + CHK(s3d_scene_view_ref_put(scnview) == RES_OK); + + printf("Cube volume = %g; Cube area = %g\n", V, A); CHK(s3d_scene_ref_put(scn) == RES_OK); }