commit 816caf720136e541f658300dbccc83cd340bff13
parent 9cf08f5ec213edb726be29946ab4464ebcafae38
Author: vaplv <vaplv@free.fr>
Date: Wed, 17 Jun 2015 16:18:27 +0200
Update the aw_<obj|mtl>_create API
Add a verbose parameter
Diffstat:
6 files changed, 58 insertions(+), 33 deletions(-)
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
@@ -46,8 +46,8 @@ add_library(aw SHARED ${AW_FILES_SRC} ${AW_FILES_INC})
target_link_libraries(aw RSys)
set(VERSION_MAJOR 1)
-set(VERSION_MINOR 0)
-set(VERSION_PATCH 2)
+set(VERSION_MINOR 1)
+set(VERSION_PATCH 0)
set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
set_target_properties(aw PROPERTIES
DEFINE_SYMBOL AW_SHARED_BUILD
diff --git a/src/aw.h b/src/aw.h
@@ -138,6 +138,7 @@ AW_API res_T
aw_obj_create
(struct logger* logger, /* NULL <=> use default logger*/
struct mem_allocator* allocator, /* NULL <=> use default allocator */
+ const int verbose, /* Verbosity level */
struct aw_obj** obj);
AW_API res_T
@@ -210,6 +211,7 @@ AW_API res_T
aw_mtl_create
(struct logger* logger, /* NULL <=> use default logger */
struct mem_allocator* allocator, /* NULL <=> use default allocator */
+ const int verbose, /* Verbosity level */
struct aw_mtl** mtl);
AW_API res_T
diff --git a/src/aw_mtl.c b/src/aw_mtl.c
@@ -59,6 +59,7 @@ struct aw_mtl {
ref_T ref;
struct mem_allocator* allocator;
struct logger* logger;
+ int verbose;
};
/*******************************************************************************
@@ -115,18 +116,21 @@ parse_newmtl(struct aw_mtl* mtl, char** word_tk)
}
static res_T
-parse_color(struct logger* logger, struct aw_color* col, char** word_tk)
+parse_color(struct aw_mtl* mtl, struct aw_color* col, char** word_tk)
{
char* word;
res_T res = RES_OK;
- ASSERT(logger && col && word_tk);
+ ASSERT(mtl && col && word_tk);
word = strtok_r(NULL, " \t", word_tk);
if(!word)
return RES_BAD_ARG;
if(!strcmp(word, "spectral")) {
- logger_print(logger, LOG_ERROR, "spectral colors are not supported\n");
+ if(mtl->verbose) {
+ logger_print
+ (mtl->logger, LOG_ERROR, "spectral colors are not supported\n");
+ }
return RES_BAD_ARG;
}
@@ -285,13 +289,13 @@ parse_mtl_line(struct aw_mtl* mtl, char* line)
} else if(mtl->newmtl == NULL) {
res = RES_BAD_ARG;
} else if(!strcmp(word, "Ka")) { /* Ambient reflectivity */
- res = parse_color(mtl->logger, &mtl->newmtl->ambient, &word_tk);
+ res = parse_color(mtl, &mtl->newmtl->ambient, &word_tk);
} else if(!strcmp(word, "Kd")) { /* Diffuse reflectivity */
- res = parse_color(mtl->logger, &mtl->newmtl->diffuse, &word_tk);
+ res = parse_color(mtl, &mtl->newmtl->diffuse, &word_tk);
} else if(!strcmp(word, "Ks")) { /* Specular reflectivity */
- res = parse_color(mtl->logger, &mtl->newmtl->specular, &word_tk);
+ res = parse_color(mtl, &mtl->newmtl->specular, &word_tk);
} else if(!strcmp(word, "Tf")) { /* Transimission filter */
- res = parse_color(mtl->logger, &mtl->newmtl->transmission, &word_tk);
+ res = parse_color(mtl, &mtl->newmtl->transmission, &word_tk);
} else if(!strcmp(word, "Ns")) { /* Specular exponent */
res = parse_floatX
(&mtl->newmtl->specular_exponent, 1, 1, 0.f, FLT_MAX, 0.f, &word_tk);
@@ -313,16 +317,20 @@ parse_mtl_line(struct aw_mtl* mtl, char* line)
res = parse_map(&mtl->newmtl->bump_map, MAP_BUMP, &word_tk);
} else {
res = RES_OK;
- logger_print(mtl->logger, LOG_WARNING,
- "%s:%lu: warning: ignored or malformed directive %s\n",
- mtl->filename, (unsigned long)mtl->iline, word);
+ if(mtl->verbose) {
+ logger_print(mtl->logger, LOG_WARNING,
+ "%s:%lu: warning: ignored or malformed directive %s\n",
+ mtl->filename, (unsigned long)mtl->iline, word);
+ }
while((word = strtok_r(NULL, " \t", &word_tk))); /* Skip spaces */
}
if(res != RES_OK)
goto error;
if((word = strtok_r(NULL, " ", &word_tk))) {
- logger_print(mtl->logger, LOG_ERROR, "%s:%lu: unexpected directive %s\n",
- mtl->filename, (unsigned long)mtl->iline, word);
+ if(mtl->verbose) {
+ logger_print(mtl->logger, LOG_ERROR, "%s:%lu: unexpected directive %s\n",
+ mtl->filename, (unsigned long)mtl->iline, word);
+ }
res = RES_BAD_ARG;
goto error;
}
@@ -330,8 +338,10 @@ parse_mtl_line(struct aw_mtl* mtl, char* line)
exit:
return res;
error:
- logger_print(mtl->logger, LOG_ERROR, "%s:%lu: error: parsing failed\n",
- mtl->filename, (unsigned long)mtl->iline);
+ if(mtl->verbose) {
+ logger_print(mtl->logger, LOG_ERROR, "%s:%lu: error: parsing failed\n",
+ mtl->filename, (unsigned long)mtl->iline);
+ }
goto exit;
}
@@ -387,6 +397,7 @@ res_T
aw_mtl_create
(struct logger* logger,
struct mem_allocator* mem_allocator,
+ const int verbose,
struct aw_mtl** mtl_out)
{
struct mem_allocator* allocator;
@@ -406,6 +417,7 @@ aw_mtl_create
ref_init(&mtl->ref);
mtl->allocator = allocator;
mtl->logger = logger ? logger : LOGGER_DEFAULT;
+ mtl->verbose = verbose;
darray_material_init(allocator, &mtl->materials);
exit:
@@ -448,7 +460,8 @@ aw_mtl_load(struct aw_mtl* mtl, const char* filename)
mtl->filename = filename;
file = fopen(filename, "r");
if(!file) {
- logger_print(mtl->logger, LOG_ERROR, "Error opening `%s'\n", filename);
+ if(mtl->verbose)
+ logger_print(mtl->logger, LOG_ERROR, "Error opening `%s'\n", filename);
return RES_IO_ERR;
}
diff --git a/src/aw_obj.c b/src/aw_obj.c
@@ -93,6 +93,7 @@ struct aw_obj {
ref_T ref;
struct mem_allocator* allocator;
struct logger* logger;
+ int verbose;
};
/*******************************************************************************
@@ -421,16 +422,20 @@ parse_obj_line(struct aw_obj* obj, char* line)
res = parse_usemtl(obj, &word_tk);
} else {
res = RES_OK;
- logger_print(obj->logger, LOG_WARNING,
- "%s:%lu: warning: ignored or malformed directive %s\n",
- obj->filename, (unsigned long)obj->iline, word);
+ if(obj->verbose) {
+ logger_print(obj->logger, LOG_WARNING,
+ "%s:%lu: warning: ignored or malformed directive %s\n",
+ obj->filename, (unsigned long)obj->iline, word);
+ }
while((word = strtok_r(NULL, " \t", &word_tk))); /* Skip the line */
}
if(res != RES_OK)
goto error;
if((word = strtok_r(NULL, " ", &word_tk))) {
- logger_print(obj->logger, LOG_ERROR, "%s:%lu: unexpected directive %s\n",
- obj->filename, (unsigned long)obj->iline, word);
+ if(obj->verbose) {
+ logger_print(obj->logger, LOG_ERROR, "%s:%lu: unexpected directive %s\n",
+ obj->filename, (unsigned long)obj->iline, word);
+ }
res = RES_BAD_ARG;
goto error;
}
@@ -438,8 +443,10 @@ parse_obj_line(struct aw_obj* obj, char* line)
exit:
return res;
error:
- logger_print(obj->logger, LOG_ERROR, "%s:%lu: error: parsing failed\n",
- obj->filename, (unsigned long)obj->iline);
+ if(obj->verbose) {
+ logger_print(obj->logger, LOG_ERROR, "%s:%lu: error: parsing failed\n",
+ obj->filename, (unsigned long)obj->iline);
+ }
goto exit;
}
@@ -467,6 +474,7 @@ res_T
aw_obj_create
(struct logger* logger,
struct mem_allocator* mem_allocator,
+ const int verbose,
struct aw_obj** obj_out)
{
struct mem_allocator* allocator;
@@ -486,6 +494,7 @@ aw_obj_create
ref_init(&obj->ref);
obj->allocator = allocator;
obj->logger = logger ? logger : LOGGER_DEFAULT;
+ obj->verbose = verbose;
darray_float_init(mem_allocator, &obj->positions);
darray_float_init(mem_allocator, &obj->normals);
darray_float_init(mem_allocator, &obj->texcoords);
@@ -536,7 +545,8 @@ aw_obj_load(struct aw_obj* obj, const char* filename)
obj->filename = filename;
file = fopen(filename, "r");
if(!file) {
- logger_print(obj->logger, LOG_ERROR, "Error opening `%s'\n", filename);
+ if(obj->verbose)
+ logger_print(obj->logger, LOG_ERROR, "Error opening `%s'\n", filename);
return RES_IO_ERR;
}
res = aw_obj_load_stream(obj, file);
diff --git a/src/test_aw_mtl.c b/src/test_aw_mtl.c
@@ -325,9 +325,9 @@ main(int argc, char** argv)
mem_init_proxy_allocator(&allocator, &mem_default_allocator);
- CHECK(aw_mtl_create(NULL, NULL, NULL), RES_BAD_ARG);
- CHECK(aw_mtl_create(NULL, &allocator, NULL), RES_BAD_ARG);
- CHECK(aw_mtl_create(NULL, NULL, &mtl), RES_OK);
+ CHECK(aw_mtl_create(NULL, NULL, 1, NULL), RES_BAD_ARG);
+ CHECK(aw_mtl_create(NULL, &allocator, 1, NULL), RES_BAD_ARG);
+ CHECK(aw_mtl_create(NULL, NULL, 1, &mtl), RES_OK);
CHECK(aw_mtl_ref_get(NULL), RES_BAD_ARG);
CHECK(aw_mtl_ref_get(mtl), RES_OK);
@@ -335,7 +335,7 @@ main(int argc, char** argv)
CHECK(aw_mtl_ref_put(mtl), RES_OK);
CHECK(aw_mtl_ref_put(mtl), RES_OK);
- CHECK(aw_mtl_create(LOGGER_DEFAULT, &allocator, &mtl), RES_OK);
+ CHECK(aw_mtl_create(LOGGER_DEFAULT, &allocator, 1, &mtl), RES_OK);
test_common(mtl);
test_multiple_materials(mtl);
diff --git a/src/test_aw_obj.c b/src/test_aw_obj.c
@@ -548,9 +548,9 @@ main(int argc, char** argv)
mem_init_proxy_allocator(&allocator, &mem_default_allocator);
- CHECK(aw_obj_create(NULL, NULL, NULL), RES_BAD_ARG);
- CHECK(aw_obj_create(NULL, &allocator, NULL), RES_BAD_ARG);
- CHECK(aw_obj_create(NULL, NULL, &obj), RES_OK);
+ CHECK(aw_obj_create(NULL, NULL, 1, NULL), RES_BAD_ARG);
+ CHECK(aw_obj_create(NULL, &allocator, 1, NULL), RES_BAD_ARG);
+ CHECK(aw_obj_create(NULL, NULL, 1, &obj), RES_OK);
CHECK(aw_obj_ref_get(NULL), RES_BAD_ARG);
CHECK(aw_obj_ref_get(obj), RES_OK);
@@ -558,7 +558,7 @@ main(int argc, char** argv)
CHECK(aw_obj_ref_put(obj), RES_OK);
CHECK(aw_obj_ref_put(obj), RES_OK);
- CHECK(aw_obj_create(LOGGER_DEFAULT, &allocator, &obj), RES_OK);
+ CHECK(aw_obj_create(LOGGER_DEFAULT, &allocator, 1, &obj), RES_OK);
test_plane(obj);
test_squares(obj);