loader_aw

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

commit 0e6261e6cff71b88f4d3a8f5962350bbde3de25b
parent 0798e726f613ff9ea13c71c1e15bddc88dad4560
Author: vaplv <vaplv@free.fr>
Date:   Wed, 24 Sep 2014 16:50:34 +0200

Add and test the missing aw_obj_mtllib_get function

Diffstat:
Msrc/aw.h | 6++++++
Msrc/aw_obj.c | 12++++++++++++
Msrc/test_aw_obj.c | 26++++++++++++++++++++++++--
3 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/src/aw.h b/src/aw.h @@ -193,6 +193,12 @@ aw_obj_mtl_get struct aw_obj_mtl* mtl); AW_API res_T +aw_obj_mtllib_get + (const struct aw_obj* obj, + const size_t mtllib_id, + const char** mtllib); + +AW_API res_T aw_obj_vertex_get (const struct aw_obj* obj, const size_t vertex_id, diff --git a/src/aw_obj.c b/src/aw_obj.c @@ -707,6 +707,18 @@ aw_obj_mtl_get } res_T +aw_obj_mtllib_get + (const struct aw_obj* obj, const size_t imtllib, const char** mtllib) +{ + const struct str* str; + if(!obj || !mtllib || imtllib >= darray_mtllib_size_get(&obj->mtllibs)) + return R_BAD_ARG; + str = darray_mtllib_cdata_get(&obj->mtllibs) + imtllib; + *mtllib = str_cget(str); + return R_OK; +} + +res_T aw_obj_vertex_get (const struct aw_obj* obj, const size_t ivertex, struct aw_obj_vertex* vertex) { diff --git a/src/test_aw_obj.c b/src/test_aw_obj.c @@ -47,6 +47,7 @@ test_plane(struct aw_obj* obj) struct aw_obj_mtl mtl; struct aw_obj_vertex vertex; FILE* file; + const char* mtllib; NCHECK(obj, NULL); @@ -97,6 +98,16 @@ test_plane(struct aw_obj* obj) CHECK(mtl.face_id, 0); CHECK(mtl.faces_count, 1); + CHECK(aw_obj_mtllib_get(NULL, AW_ID_NONE, NULL), R_BAD_ARG); + CHECK(aw_obj_mtllib_get(obj, AW_ID_NONE, NULL), R_BAD_ARG); + CHECK(aw_obj_mtllib_get(NULL, 0, NULL), R_BAD_ARG); + CHECK(aw_obj_mtllib_get(obj, 0, NULL), R_BAD_ARG); + CHECK(aw_obj_mtllib_get(NULL, AW_ID_NONE, &mtllib), R_BAD_ARG); + CHECK(aw_obj_mtllib_get(obj, AW_ID_NONE, &mtllib), R_BAD_ARG); + CHECK(aw_obj_mtllib_get(NULL, 0, &mtllib), R_BAD_ARG); + CHECK(aw_obj_mtllib_get(obj, 0, &mtllib), R_OK); + CHECK(strcmp(mtllib, "master.mtl"), 0); + CHECK(aw_obj_vertex_get(NULL, AW_ID_NONE, NULL), R_BAD_ARG); CHECK(aw_obj_vertex_get(obj, AW_ID_NONE, NULL), R_BAD_ARG); CHECK(aw_obj_vertex_get(NULL, 0, NULL), R_BAD_ARG); @@ -240,7 +251,8 @@ test_cube(struct aw_obj* obj) { static const char* cube_obj = "# Cube with a different material applied to each of its faces\n" - "mtllib master.mtl\n" + "mtllib master.mtl hop.mtl\n" + "mtllib my.mtl\n" "v\t0.0000 2.0000 2.0000\n" "v 0.0000 0.0000 2.0000\n" "v 2.0000 0.0000 2.0000\n" @@ -275,6 +287,7 @@ test_cube(struct aw_obj* obj) { "red", "blue", "green", "gold", "orange", "purple" }; struct aw_obj_desc desc; FILE* file; + const char* mtllib; size_t i; NCHECK(obj, NULL); @@ -294,7 +307,7 @@ test_cube(struct aw_obj* obj) CHECK(desc.groups_count, 6); CHECK(desc.smooth_groups_count, 0); CHECK(desc.usemtls_count, 6); - CHECK(desc.mtllibs_count, 1); + CHECK(desc.mtllibs_count, 3); FOR_EACH(i, 0, 6) { struct aw_obj_face face; @@ -321,6 +334,15 @@ test_cube(struct aw_obj* obj) CHECK(mtl.face_id, i); CHECK(mtl.faces_count, 1); } + + CHECK(aw_obj_mtllib_get(obj, 0, &mtllib), R_OK); + CHECK(strcmp(mtllib, "master.mtl"), 0); + CHECK(aw_obj_mtllib_get(obj, 1, &mtllib), R_OK); + CHECK(strcmp(mtllib, "hop.mtl"), 0); + CHECK(aw_obj_mtllib_get(obj, 2, &mtllib), R_OK); + CHECK(strcmp(mtllib, "my.mtl"), 0); + CHECK(aw_obj_mtllib_get(obj, 3, &mtllib), R_BAD_ARG); + fclose(file); }