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