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