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