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 1219563e93d695ab07744ae34880dba33bef8999
parent f6f0aad6daa6f46570b5be1be665074a735559d7
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Thu, 19 Mar 2015 10:33:45 +0100

Test the s3d_shape_instance_<set_position|translate> functions

Diffstat:
Msrc/s3d.h | 2+-
Msrc/s3d_shape.c | 7++++---
Msrc/test_s3d_shape.c | 25++++++++++++++++++++++++-
3 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/src/s3d.h b/src/s3d.h @@ -183,7 +183,7 @@ s3d_scene_ref_put S3D_API res_T s3d_scene_instantiate (struct s3d_scene* scn, - struct s3d_shape* shape); + struct s3d_shape** shape); /* Attach the shape to the scene. If the shape is already attached to the same * or another scene, nothing is performed and a RES_BAD_ARG error is returned. diff --git a/src/s3d_shape.c b/src/s3d_shape.c @@ -238,6 +238,7 @@ shape_release_data(struct s3d_shape* shape) switch(shape->type) { case SHAPE_MESH: mesh_release(&shape->data.mesh); break; case SHAPE_NONE: /* Do nothing */ break; + case SHAPE_INSTANCE: S3D(scene_ref_put(shape->data.scene)); break; default: FATAL("Unreachable code\n"); break; } shape->type = SHAPE_NONE; @@ -387,13 +388,13 @@ s3d_shape_instance_set_position mutex_rw_wlock(shape->lock); shape->transform[9] = -f3_dot(f33_row(axis, shape->transform, 0), position); shape->transform[10] = -f3_dot(f33_row(axis, shape->transform, 1), position); - shape->transform[12] = -f3_dot(f33_row(axis, shape->transform, 2), position); + shape->transform[11] = -f3_dot(f33_row(axis, shape->transform, 2), position); mutex_rw_unlock(shape->lock); return RES_OK; } res_T -s3d_shape_translate +s3d_shape_instance_translate (struct s3d_shape* shape, const enum s3d_transform_space space, const float translation[3]) @@ -413,7 +414,7 @@ s3d_shape_translate } else { return RES_BAD_ARG; } - return RES_BAD_ARG; + return RES_OK; } res_T diff --git a/src/test_s3d_shape.c b/src/test_s3d_shape.c @@ -40,8 +40,10 @@ main(int argc, char** argv) struct mem_allocator allocator; struct s3d_device* dev; struct s3d_shape* shape; + struct s3d_shape* inst; struct s3d_scene* scn; struct s3d_vertex_data attribs[4]; + float pos[3]; char c; (void)argc, (void)argv; @@ -199,12 +201,33 @@ main(int argc, char** argv) CHECK(s3d_shape_mesh_setup_indexed_vertices (shape, cbox_ntris, S3D_KEEP, cbox_nverts, attribs, NULL), RES_OK); + CHECK(s3d_scene_attach_shape(scn, shape), RES_OK); + + CHECK(s3d_scene_instantiate(scn, &inst), RES_OK); + + CHECK(s3d_shape_instance_set_position(NULL, NULL), RES_BAD_ARG); + CHECK(s3d_shape_instance_set_position(inst, NULL), RES_BAD_ARG); + CHECK(s3d_shape_instance_set_position(NULL, pos), RES_BAD_ARG); + CHECK(s3d_shape_instance_set_position(inst, pos), RES_OK); + CHECK(s3d_shape_instance_set_position(shape, pos), RES_BAD_ARG); + + CHECK(s3d_shape_instance_translate(NULL, -1, NULL), RES_BAD_ARG); + CHECK(s3d_shape_instance_translate(inst, -1, NULL), RES_BAD_ARG); + CHECK(s3d_shape_instance_translate(NULL, S3D_LOCAL_TRANSFORM, NULL), RES_BAD_ARG); + CHECK(s3d_shape_instance_translate(inst, S3D_LOCAL_TRANSFORM, NULL), RES_BAD_ARG); + CHECK(s3d_shape_instance_translate(NULL, -1, pos), RES_BAD_ARG); + CHECK(s3d_shape_instance_translate(inst, -1, pos), RES_BAD_ARG); + CHECK(s3d_shape_instance_translate(NULL, S3D_LOCAL_TRANSFORM, pos), RES_BAD_ARG); + CHECK(s3d_shape_instance_translate(inst, S3D_LOCAL_TRANSFORM, pos), RES_OK); + CHECK(s3d_shape_instance_translate(inst, S3D_WORLD_TRANSFORM, pos), RES_OK); + CHECK(s3d_shape_instance_translate(shape, S3D_WORLD_TRANSFORM, pos), RES_BAD_ARG); + CHECK(s3d_shape_ref_get(NULL), RES_BAD_ARG); CHECK(s3d_shape_ref_get(shape), RES_OK); CHECK(s3d_shape_ref_put(NULL), RES_BAD_ARG); CHECK(s3d_shape_ref_put(shape), RES_OK); CHECK(s3d_shape_ref_put(shape), RES_OK); - + CHECK(s3d_shape_ref_put(inst), RES_OK); CHECK(s3d_scene_ref_put(scn), RES_OK); CHECK(s3d_device_ref_put(dev), RES_OK);;