commit 90b7dc71d9f65c1d2c76cdda8739b785db370da9
parent 6dd73f8d48cac7f162e4d30418662dcac26a7b8d
Author: vaplv <vaplv@free.fr>
Date: Tue, 16 Dec 2014 09:36:51 +0100
Add and test the aw_<obj|mtl>_clear functions
Diffstat:
5 files changed, 55 insertions(+), 19 deletions(-)
diff --git a/src/aw.h b/src/aw.h
@@ -164,6 +164,10 @@ aw_obj_load_stream
FILE* stream);
AW_API res_T
+aw_obj_clear
+ (struct aw_obj* obj);
+
+AW_API res_T
aw_obj_desc_get
(struct aw_obj* obj,
struct aw_obj_desc* desc);
@@ -232,6 +236,10 @@ aw_mtl_load_stream
FILE* stream);
AW_API res_T
+aw_mtl_clear
+ (struct aw_mtl* mtl);
+
+AW_API res_T
aw_mtl_materials_count_get
(struct aw_mtl* mtl,
size_t* materials_count);
diff --git a/src/aw_mtl.c b/src/aw_mtl.c
@@ -668,6 +668,15 @@ error:
}
res_T
+aw_mtl_clear(struct aw_mtl* mtl)
+{
+ if(!mtl) return RES_BAD_ARG;
+ darray_material_clear(&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
@@ -483,22 +483,6 @@ error:
}
static void
-obj_clear(struct aw_obj* obj)
-{
- ASSERT(obj);
- darray_float_clear(&obj->positions);
- darray_float_clear(&obj->normals);
- darray_float_clear(&obj->texcoords);
- darray_vertex_clear(&obj->vertices);
- darray_face_clear(&obj->faces);
- darray_named_group_clear(&obj->groups);
- darray_named_group_clear(&obj->usemtls);
- darray_smooth_group_clear(&obj->smooth_groups);
- darray_mtllib_clear(&obj->mtllibs);
- obj->igroups_active = 0;
-}
-
-static void
obj_release(ref_T* ref)
{
struct aw_obj* obj = CONTAINER_OF(ref, struct aw_obj, ref);
@@ -621,7 +605,7 @@ aw_obj_load_stream(struct aw_obj* obj, FILE* stream)
if(!obj->filename)
obj->filename = "stream";
obj->iline = 1;
- obj_clear(obj);
+ AW(obj_clear(obj));
while((line = fgets
(darray_char_data_get(&buf), (int)darray_char_size_get(&buf), stream))) {
size_t last_char;
@@ -653,11 +637,26 @@ exit:
darray_char_release(&buf);
return res;
error:
- if(obj)
- obj_clear(obj);
+ if(obj) AW(obj_clear(obj));
goto exit;
}
+res_T
+aw_obj_clear(struct aw_obj* obj)
+{
+ if(!obj) return RES_BAD_ARG;
+ darray_float_clear(&obj->positions);
+ darray_float_clear(&obj->normals);
+ darray_float_clear(&obj->texcoords);
+ darray_vertex_clear(&obj->vertices);
+ darray_face_clear(&obj->faces);
+ darray_named_group_clear(&obj->groups);
+ darray_named_group_clear(&obj->usemtls);
+ darray_smooth_group_clear(&obj->smooth_groups);
+ darray_mtllib_clear(&obj->mtllibs);
+ obj->igroups_active = 0;
+ return RES_OK;
+}
res_T
aw_obj_desc_get(struct aw_obj* obj, struct aw_obj_desc* desc)
diff --git a/src/test_aw_mtl.c b/src/test_aw_mtl.c
@@ -73,6 +73,13 @@ test_common(struct aw_mtl* mtl)
CHECK(nmtls, 1);
+ CHECK(aw_mtl_clear(NULL), RES_BAD_ARG);
+ CHECK(aw_mtl_clear(mtl), RES_OK);
+ CHECK(aw_mtl_materials_count_get(mtl, &nmtls), RES_OK);
+ CHECK(nmtls, 0);
+
+ CHECK(aw_mtl_load(mtl, "test_mtl_common.mtl"), RES_OK);
+
CHECK(aw_material_init(NULL), RES_BAD_ARG);
CHECK(aw_material_init(&mtr), RES_OK);
CHECK(aw_mtl_material_get(NULL, SIZE_MAX, NULL), RES_BAD_ARG);
diff --git a/src/test_aw_obj.c b/src/test_aw_obj.c
@@ -309,6 +309,19 @@ test_cube(struct aw_obj* obj)
CHECK(desc.usemtls_count, 6);
CHECK(desc.mtllibs_count, 3);
+ CHECK(aw_obj_clear(NULL), RES_BAD_ARG);
+ CHECK(aw_obj_clear(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);
+
+ CHECK(fseek(file, 0, SEEK_SET), 0);
+ CHECK(aw_obj_load_stream(obj, file), RES_OK);
+ CHECK(aw_obj_desc_get(obj, &desc), RES_OK);
+
FOR_EACH(i, 0, 6) {
struct aw_obj_face face;
CHECK(aw_obj_face_get(obj, i, &face), RES_OK);