commit 7fc020c01bd5aedbd6dc4498c37a1d8d4fec2054
parent 68ace9d987a2de9a06eece608652e4e001462d38
Author: vaplv <vaplv@free.fr>
Date: Wed, 24 Sep 2014 09:55:19 +0200
Add a logger to the mtl/obj APIs
Diffstat:
5 files changed, 45 insertions(+), 30 deletions(-)
diff --git a/src/aw.h b/src/aw.h
@@ -131,6 +131,7 @@ struct aw_material {
struct aw_obj;
struct aw_mtl;
+struct logger;
struct mem_allocator;
BEGIN_DECLS
@@ -140,7 +141,8 @@ BEGIN_DECLS
******************************************************************************/
AW_API res_T
aw_obj_create
- (struct mem_allocator* allocator, /* NULL <=> use default allocator */
+ (struct logger* logger, /* NULL <=> use default logger*/
+ struct mem_allocator* allocator, /* NULL <=> use default allocator */
struct aw_obj** obj);
AW_API res_T
@@ -201,7 +203,8 @@ aw_obj_vertex_get
******************************************************************************/
AW_API res_T
aw_mtl_create
- (struct mem_allocator* allocator, /* NULL <=> use default allocator */
+ (struct logger* logger, /* NULL <=> use default logger */
+ struct mem_allocator* allocator, /* NULL <=> use default allocator */
struct aw_mtl** mtl);
AW_API res_T
diff --git a/src/aw_mtl.c b/src/aw_mtl.c
@@ -19,6 +19,7 @@
#include <rsys/dynamic_array_char.h>
#include <rsys/float3.h>
+#include <rsys/logger.h>
#include <rsys/mem_allocator.h>
#include <rsys/ref_count.h>
@@ -184,6 +185,7 @@ struct aw_mtl {
ref_T ref;
struct mem_allocator* allocator;
+ struct logger* logger;
};
/*******************************************************************************
@@ -260,18 +262,18 @@ parse_newmtl(struct aw_mtl* mtl, char** word_tk)
}
static res_T
-parse_color(struct aw_color* col, char** word_tk)
+parse_color(struct logger* logger, struct aw_color* col, char** word_tk)
{
char* word;
res_T res = R_OK;
- ASSERT(col && word_tk);
+ ASSERT(logger && col && word_tk);
word = strtok_r(NULL, " \t", word_tk);
if(!word)
return R_BAD_ARG;
if(!strcmp(word, "spectral")) {
- fprintf(stderr, "spectral colors are not supported\n");
+ logger_print(logger, LOG_ERROR, "spectral colors are not supported\n");
return R_BAD_ARG;
}
@@ -430,13 +432,13 @@ parse_mtl_line(struct aw_mtl* mtl, char* line)
} else if(mtl->newmtl == NULL) {
res = R_BAD_ARG;
} else if(!strcmp(word, "Ka")) { /* Ambient reflectivity */
- res = parse_color(&mtl->newmtl->ambient, &word_tk);
+ res = parse_color(mtl->logger, &mtl->newmtl->ambient, &word_tk);
} else if(!strcmp(word, "Kd")) { /* Diffuse reflectivity */
- res = parse_color(&mtl->newmtl->diffuse, &word_tk);
+ res = parse_color(mtl->logger, &mtl->newmtl->diffuse, &word_tk);
} else if(!strcmp(word, "Ks")) { /* Specular reflectivity */
- res = parse_color(&mtl->newmtl->specular, &word_tk);
+ res = parse_color(mtl->logger, &mtl->newmtl->specular, &word_tk);
} else if(!strcmp(word, "Tf")) { /* Transimission filter */
- res = parse_color(&mtl->newmtl->transmission, &word_tk);
+ res = parse_color(mtl->logger, &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);
@@ -458,14 +460,15 @@ parse_mtl_line(struct aw_mtl* mtl, char* line)
res = parse_map(&mtl->newmtl->bump_map, MAP_BUMP, &word_tk);
} else {
res = R_OK;
- fprintf(stderr, "%s:%lu: warning: ignored or malformed directive %s\n",
+ logger_print(mtl->logger, LOG_ERROR,
+ "%s:%lu: warning: ignored or malformed directive %s\n",
mtl->filename, (unsigned long)mtl->iline, word);
- while((word = strtok_r(NULL, " \t", &word_tk)));
+ while((word = strtok_r(NULL, " \t", &word_tk))); /* Skip spaces */
}
if(res != R_OK)
goto error;
if((word = strtok_r(NULL, " ", &word_tk))) {
- fprintf(stderr, "%s:%lu: unexpected directive %s\n",
+ logger_print(mtl->logger, LOG_ERROR, "%s:%lu: unexpected directive %s\n",
mtl->filename, (unsigned long)mtl->iline, word);
res = R_BAD_ARG;
goto error;
@@ -474,7 +477,7 @@ parse_mtl_line(struct aw_mtl* mtl, char* line)
exit:
return res;
error:
- fprintf(stderr, "%s:%lu: error: parsing failed\n",
+ logger_print(mtl->logger, LOG_ERROR, "%s:%lu: error: parsing failed\n",
mtl->filename, (unsigned long)mtl->iline);
goto exit;
}
@@ -501,7 +504,8 @@ mtl_release(ref_T* ref)
******************************************************************************/
res_T
aw_mtl_create
- (struct mem_allocator* mem_allocator,
+ (struct logger* logger,
+ struct mem_allocator* mem_allocator,
struct aw_mtl** mtl_out)
{
struct mem_allocator* allocator;
@@ -518,8 +522,9 @@ aw_mtl_create
res = R_MEM_ERR;
goto error;
}
- mtl->allocator = allocator;
ref_init(&mtl->ref);
+ mtl->allocator = allocator;
+ mtl->logger = logger ? logger : LOGGER_DEFAULT;
darray_material_init(allocator, &mtl->materials);
exit:
@@ -564,7 +569,7 @@ aw_mtl_load(struct aw_mtl* mtl, const char* filename)
mtl->filename = filename;
file = fopen(filename, "r");
if(!file) {
- fprintf(stderr, "Error opening `%s'\n", filename);
+ logger_print(mtl->logger, LOG_ERROR, "Error opening `%s'\n", filename);
return R_BAD_ARG;
}
diff --git a/src/aw_obj.c b/src/aw_obj.c
@@ -21,6 +21,7 @@
#include <rsys/dynamic_array_float.h>
#include <rsys/float3.h>
#include <rsys/float4.h>
+#include <rsys/logger.h>
#include <rsys/mem_allocator.h>
#include <rsys/ref_count.h>
#include <rsys/str.h>
@@ -125,6 +126,7 @@ struct aw_obj {
ref_T ref;
struct mem_allocator* allocator;
+ struct logger* logger;
};
/*******************************************************************************
@@ -440,13 +442,14 @@ parse_obj_line(struct aw_obj* obj, char* line)
res = parse_usemtl(obj, &word_tk);
} else {
res = R_OK;
- fprintf(stderr, "%s:%lu: warning: ignored or malformed directive %s",
+ logger_print(obj->logger, LOG_ERROR,
+ "%s:%lu: warning: ignored or malformed directive %s",
obj->filename, (unsigned long)obj->iline, word);
}
if(res != R_OK)
goto error;
if((word = strtok_r(NULL, " ", &word_tk))) {
- fprintf(stderr, "%s:%lu: unexpected directive %s\n",
+ logger_print(obj->logger, LOG_ERROR, "%s:%lu: unexpected directive %s\n",
obj->filename, (unsigned long)obj->iline, word);
res = R_BAD_ARG;
goto error;
@@ -455,7 +458,7 @@ parse_obj_line(struct aw_obj* obj, char* line)
exit:
return res;
error:
- fprintf(stderr, "%s:%lu: error: parsing failed\n",
+ logger_print(obj->logger, LOG_ERROR, "%s:%lu: error: parsing failed\n",
obj->filename, (unsigned long)obj->iline);
goto exit;
}
@@ -498,7 +501,8 @@ obj_release(ref_T* ref)
******************************************************************************/
res_T
aw_obj_create
- (struct mem_allocator* mem_allocator,
+ (struct logger* logger,
+ struct mem_allocator* mem_allocator,
struct aw_obj** obj_out)
{
struct mem_allocator* allocator;
@@ -515,8 +519,9 @@ aw_obj_create
res = R_MEM_ERR;
goto error;
}
- obj->allocator = allocator;
ref_init(&obj->ref);
+ obj->allocator = allocator;
+ obj->logger = logger ? logger : LOGGER_DEFAULT;
darray_float_init(mem_allocator, &obj->positions);
darray_float_init(mem_allocator, &obj->normals);
darray_float_init(mem_allocator, &obj->texcoords);
@@ -569,7 +574,7 @@ aw_obj_load(struct aw_obj* obj, const char* filename)
obj->filename = filename;
file = fopen(filename, "r");
if(!file) {
- fprintf(stderr, "Error opening `%s'\n", filename);
+ logger_print(obj->logger, LOG_ERROR, "Error opening `%s'\n", filename);
return R_BAD_ARG;
}
diff --git a/src/test_aw_mtl.c b/src/test_aw_mtl.c
@@ -16,6 +16,7 @@
#include "aw.h"
#include <rsys/float3.h>
+#include <rsys/logger.h>
#include <rsys/mem_allocator.h>
#include <string.h>
@@ -308,9 +309,9 @@ main(int argc, char** argv)
mem_init_proxy_allocator(&allocator, &mem_default_allocator);
- CHECK(aw_mtl_create(NULL, NULL), R_BAD_ARG);
- CHECK(aw_mtl_create(&allocator, NULL), R_BAD_ARG);
- CHECK(aw_mtl_create(NULL, &mtl), R_OK);
+ CHECK(aw_mtl_create(NULL, NULL, NULL), R_BAD_ARG);
+ CHECK(aw_mtl_create(NULL, &allocator, NULL), R_BAD_ARG);
+ CHECK(aw_mtl_create(NULL, NULL, &mtl), R_OK);
CHECK(aw_mtl_ref_get(NULL), R_BAD_ARG);
CHECK(aw_mtl_ref_get(mtl), R_OK);
@@ -318,7 +319,7 @@ main(int argc, char** argv)
CHECK(aw_mtl_ref_put(mtl), R_OK);
CHECK(aw_mtl_ref_put(mtl), R_OK);
- CHECK(aw_mtl_create(&allocator, &mtl), R_OK);
+ CHECK(aw_mtl_create(LOGGER_DEFAULT, &allocator, &mtl), R_OK);
test_common(mtl);
test_multiple_materials(mtl);
diff --git a/src/test_aw_obj.c b/src/test_aw_obj.c
@@ -17,6 +17,7 @@
#include <rsys/float3.h>
#include <rsys/float4.h>
+#include <rsys/logger.h>
#include <rsys/mem_allocator.h>
#include <string.h>
@@ -332,9 +333,9 @@ main(int argc, char** argv)
mem_init_proxy_allocator(&allocator, &mem_default_allocator);
- CHECK(aw_obj_create(NULL, NULL), R_BAD_ARG);
- CHECK(aw_obj_create(&allocator, NULL), R_BAD_ARG);
- CHECK(aw_obj_create(NULL, &obj), R_OK);
+ CHECK(aw_obj_create(NULL, NULL, NULL), R_BAD_ARG);
+ CHECK(aw_obj_create(NULL, &allocator, NULL), R_BAD_ARG);
+ CHECK(aw_obj_create(NULL, NULL, &obj), R_OK);
CHECK(aw_obj_ref_get(NULL), R_BAD_ARG);
CHECK(aw_obj_ref_get(obj), R_OK);
@@ -342,7 +343,7 @@ main(int argc, char** argv)
CHECK(aw_obj_ref_put(obj), R_OK);
CHECK(aw_obj_ref_put(obj), R_OK);
- CHECK(aw_obj_create(&allocator, &obj), R_OK);
+ CHECK(aw_obj_create(LOGGER_DEFAULT, &allocator, &obj), R_OK);
test_plane(obj);
test_squares(obj);