commit ecf010760f0bc2e73f2f96c6d7b1259ed81441b4
parent 7a747b7c3938581444403c87667588d0b0b4d39b
Author: vaplv <vaplv@free.fr>
Date: Thu, 22 Dec 2016 15:36:45 +0100
Add and test the aw_<obj|mtl>_purge function
Clear the <obj|mtl> loader and release the internal memory used to store
the <obj|mtl> data.
Diffstat:
5 files changed, 50 insertions(+), 0 deletions(-)
diff --git a/src/aw.h b/src/aw.h
@@ -163,6 +163,11 @@ AW_API res_T
aw_obj_clear
(struct aw_obj* obj);
+/* Clear and release the internal memory */
+AW_API res_T
+aw_obj_purge
+ (struct aw_obj* obj);
+
AW_API res_T
aw_obj_desc_get
(struct aw_obj* obj,
@@ -236,6 +241,11 @@ AW_API res_T
aw_mtl_clear
(struct aw_mtl* mtl);
+/* Clear and release the internal memory */
+AW_API res_T
+aw_mtl_purge
+ (struct aw_mtl* mtl);
+
AW_API res_T
aw_mtl_materials_count_get
(struct aw_mtl* mtl,
diff --git a/src/aw_mtl.c b/src/aw_mtl.c
@@ -535,6 +535,15 @@ aw_mtl_clear(struct aw_mtl* mtl)
}
res_T
+aw_mtl_purge(struct aw_mtl* mtl)
+{
+ if(!mtl) return RES_BAD_ARG;
+ darray_material_purge(&mtl->materials);
+ mtl->newmtl = NULL;
+ return RES_OK;
+}
+
+res_T
aw_mtl_materials_count_get(struct aw_mtl* mtl, size_t* nmtls)
{
if(!mtl || !nmtls)
diff --git a/src/aw_obj.c b/src/aw_obj.c
@@ -630,6 +630,23 @@ aw_obj_clear(struct aw_obj* obj)
}
res_T
+aw_obj_purge(struct aw_obj* obj)
+{
+ if(!obj) return RES_BAD_ARG;
+ darray_float_purge(&obj->positions);
+ darray_float_purge(&obj->normals);
+ darray_float_purge(&obj->texcoords);
+ darray_vertex_purge(&obj->vertices);
+ darray_face_purge(&obj->faces);
+ darray_named_group_purge(&obj->groups);
+ darray_named_group_purge(&obj->usemtls);
+ darray_smooth_group_purge(&obj->smooth_groups);
+ darray_mtllib_purge(&obj->mtllibs);
+ obj->igroups_active = 0;
+ return RES_OK;
+}
+
+res_T
aw_obj_desc_get(struct aw_obj* obj, struct aw_obj_desc* desc)
{
if(!obj || !desc)
diff --git a/src/test_aw_mtl.c b/src/test_aw_mtl.c
@@ -157,6 +157,11 @@ test_common(struct aw_mtl* mtl)
CHECK(aw_material_release(NULL), RES_BAD_ARG);
CHECK(aw_material_release(&mtr), RES_OK);
+
+ CHECK(aw_mtl_purge(NULL), RES_BAD_ARG);
+ CHECK(aw_mtl_purge(mtl), RES_OK);
+ CHECK(aw_mtl_materials_count_get(mtl, &nmtls), RES_OK);
+ CHECK(nmtls, 0);
}
static void
diff --git a/src/test_aw_obj.c b/src/test_aw_obj.c
@@ -387,6 +387,15 @@ test_cube(struct aw_obj* obj)
CHECK(strcmp(mtllib, "my.mtl"), 0);
CHECK(aw_obj_mtllib_get(obj, 3, &mtllib), RES_BAD_ARG);
+ CHECK(aw_obj_purge(NULL), RES_BAD_ARG);
+ CHECK(aw_obj_purge(obj), RES_OK);
+ CHECK(aw_obj_desc_get(obj, &desc), RES_OK);
+ CHECK(desc.faces_count, 0);
+ CHECK(desc.groups_count, 0);
+ CHECK(desc.smooth_groups_count, 0);
+ CHECK(desc.usemtls_count, 0);
+ CHECK(desc.mtllibs_count, 0);
+
fclose(file);
}