loader_aw

Load OBJ/MTL file formats
git clone git://git.meso-star.fr/loader_aw.git
Log | Files | Refs | README | LICENSE

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:
Msrc/aw.h | 10++++++++++
Msrc/aw_mtl.c | 9+++++++++
Msrc/aw_obj.c | 17+++++++++++++++++
Msrc/test_aw_mtl.c | 5+++++
Msrc/test_aw_obj.c | 9+++++++++
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); }