solstice-solver

Solver library of the solstice app
git clone git://git.meso-star.com/solstice-solver.git
Log | Files | Refs | README | LICENSE

commit 6f50e412afe99da5f174ecc41bfc04bb88f105af
parent f184c974daac80f8769994d6c92d428feace00fd
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Wed,  4 Jan 2017 15:11:02 +0100

Fix an issue in the ssol_object_clear function

Object with several shaded shapes was wrongly cleared

Diffstat:
Msrc/ssol_object.c | 2+-
Msrc/test_ssol_object.c | 4++++
2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/ssol_object.c b/src/ssol_object.c @@ -199,7 +199,7 @@ ssol_object_clear(struct ssol_object* obj) n = darray_shaded_shape_size_get(&obj->shaded_shapes); FOR_EACH(i, 0, n) { - struct shaded_shape* s = darray_shaded_shape_data_get(&obj->shaded_shapes); + struct shaded_shape* s = darray_shaded_shape_data_get(&obj->shaded_shapes)+i; SSOL(shape_ref_put(s->shape)); SSOL(material_ref_put(s->mtl_front)); SSOL(material_ref_put(s->mtl_back)); diff --git a/src/test_ssol_object.c b/src/test_ssol_object.c @@ -25,6 +25,7 @@ main(int argc, char** argv) struct mem_allocator allocator; struct ssol_device* dev; struct ssol_shape* shape; + struct ssol_shape* shape2; struct ssol_material* mtl; struct ssol_material* mtl2; struct ssol_object* object; @@ -42,6 +43,7 @@ main(int argc, char** argv) CHECK(ssol_material_create_virtual(dev, &mtl), RES_OK); CHECK(ssol_material_create_virtual(dev, &mtl2), RES_OK); CHECK(ssol_shape_create_punched_surface(dev, &shape), RES_OK); + CHECK(ssol_shape_create_punched_surface(dev, &shape2), RES_OK); CHECK(ssol_object_create(NULL, NULL), RES_BAD_ARG); CHECK(ssol_object_create(dev, NULL), RES_BAD_ARG); @@ -64,6 +66,7 @@ main(int argc, char** argv) CHECK(ssol_object_add_shaded_shape(object, NULL, mtl, mtl), RES_BAD_ARG); CHECK(ssol_object_add_shaded_shape(NULL, shape, mtl, mtl), RES_BAD_ARG); CHECK(ssol_object_add_shaded_shape(object, shape, mtl, mtl), RES_OK); + CHECK(ssol_object_add_shaded_shape(object, shape2, mtl2, mtl2), RES_OK); CHECK(ssol_object_ref_get(NULL), RES_BAD_ARG); CHECK(ssol_object_ref_get(object), RES_OK); @@ -80,6 +83,7 @@ main(int argc, char** argv) CHECK(ssol_object_ref_put(object), RES_OK); CHECK(ssol_shape_ref_put(shape), RES_OK); + CHECK(ssol_shape_ref_put(shape2), RES_OK); CHECK(ssol_material_ref_put(mtl), RES_OK); CHECK(ssol_material_ref_put(mtl2), RES_OK); CHECK(ssol_device_ref_put(dev), RES_OK);