loader_aw

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

commit 68ace9d987a2de9a06eece608652e4e001462d38
parent 16405eb66ee858c999c2ec92a655f358c9903dd1
Author: vaplv <vaplv@free.fr>
Date:   Tue, 23 Sep 2014 17:45:45 +0200

Replace the useless enum aw_result type by res_T

Diffstat:
Msrc/aw.c | 12++++++------
Msrc/aw.h | 44+++++++++++++++++++-------------------------
Msrc/aw_c.h | 18+++++++++---------
Msrc/aw_mtl.c | 189++++++++++++++++++++++++++++++++++++++++---------------------------------------
Msrc/aw_obj.c | 198++++++++++++++++++++++++++++++++++++++-----------------------------------------
Msrc/test_aw_mtl.c | 72++++++++++++++++++++++++++++++++++++------------------------------------
Msrc/test_aw_obj.c | 170++++++++++++++++++++++++++++++++++++++++----------------------------------------
7 files changed, 345 insertions(+), 358 deletions(-)

diff --git a/src/aw.c b/src/aw.c @@ -22,7 +22,7 @@ /******************************************************************************* * Local functions ******************************************************************************/ -enum aw_result +res_T parse_floatX (float* f, const unsigned int count_min, @@ -38,21 +38,21 @@ parse_floatX FOR_EACH(i, 0, count_max) { char* real; - enum aw_result res; + res_T res; if(NULL == (real = strtok_r(NULL, " ", tk_ctxt))) break; res = string_to_float(real, f + i); - if(res != AW_OK) + if(res != R_OK) return res; if(f[i] < range_min || f[i] > range_max) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; } if(i < count_min) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; FOR_EACH(i, i, count_max) f[i] = default_value; - return AW_OK; + return R_OK; } diff --git a/src/aw.h b/src/aw.h @@ -27,19 +27,13 @@ #endif #ifndef NDEBUG - #define AW(Func) ASSERT(aw_##Func == AW_OK) + #define AW(Func) ASSERT(aw_##Func == R_OK) #else #define AW(Func) aw_##Func #endif #define AW_ID_NONE ((size_t)(-1)) -enum aw_result { - AW_BAD_ARGUMENT, - AW_MEMORY_ERROR, - AW_OK -}; - enum aw_color_space { AW_COLOR_RGB, AW_COLOR_XYZ @@ -144,59 +138,59 @@ BEGIN_DECLS /******************************************************************************* * Obj functions ******************************************************************************/ -AW_API enum aw_result +AW_API res_T aw_obj_create (struct mem_allocator* allocator, /* NULL <=> use default allocator */ struct aw_obj** obj); -AW_API enum aw_result +AW_API res_T aw_obj_ref_get (struct aw_obj* obj); -AW_API enum aw_result +AW_API res_T aw_obj_ref_put (struct aw_obj* obj); -AW_API enum aw_result +AW_API res_T aw_obj_load (struct aw_obj* obj, const char* filename); -AW_API enum aw_result +AW_API res_T aw_obj_load_stream (struct aw_obj* obj, FILE* stream); -AW_API enum aw_result +AW_API res_T aw_obj_desc_get (struct aw_obj* obj, struct aw_obj_desc* desc); -AW_API enum aw_result +AW_API res_T aw_obj_face_get (const struct aw_obj* obj, const size_t face_id, struct aw_obj_face* face); -AW_API enum aw_result +AW_API res_T aw_obj_group_get (const struct aw_obj* obj, const size_t group_id, struct aw_obj_group* group); -AW_API enum aw_result +AW_API res_T aw_obj_smooth_group_get (const struct aw_obj* obj, const size_t smooth_group_id, struct aw_obj_smooth_group* smooth_group); -AW_API enum aw_result +AW_API res_T aw_obj_mtl_get (const struct aw_obj* obj, const size_t mtl_id, struct aw_obj_mtl* mtl); -AW_API enum aw_result +AW_API res_T aw_obj_vertex_get (const struct aw_obj* obj, const size_t vertex_id, @@ -205,35 +199,35 @@ aw_obj_vertex_get /******************************************************************************* * Mtl functions ******************************************************************************/ -AW_API enum aw_result +AW_API res_T aw_mtl_create (struct mem_allocator* allocator, /* NULL <=> use default allocator */ struct aw_mtl** mtl); -AW_API enum aw_result +AW_API res_T aw_mtl_ref_get (struct aw_mtl* mtl); -AW_API enum aw_result +AW_API res_T aw_mtl_ref_put (struct aw_mtl* mtl); -AW_API enum aw_result +AW_API res_T aw_mtl_load (struct aw_mtl* mtl, const char* filename); -AW_API enum aw_result +AW_API res_T aw_mtl_load_stream (struct aw_mtl* mtl, FILE* stream); -AW_API enum aw_result +AW_API res_T aw_mtl_materials_count_get (struct aw_mtl* mtl, size_t* materials_count); -AW_API enum aw_result +AW_API res_T aw_mtl_material_get (struct aw_mtl* mtl, const size_t imaterial, diff --git a/src/aw_c.h b/src/aw_c.h @@ -18,33 +18,33 @@ #include "aw.h" -static FINLINE enum aw_result +static FINLINE res_T string_to_float(const char* str, float* f) { char* ptr = NULL; ASSERT(f); if(!str) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; *f = (float)strtod(str, &ptr); if(ptr == str || *ptr != '\0') - return AW_BAD_ARGUMENT; - return AW_OK; + return R_BAD_ARG; + return R_OK; } -static FINLINE enum aw_result +static FINLINE res_T string_to_size_t(const char* str, size_t* i) { char* ptr = NULL; ASSERT(i); if(!str) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; *i = (size_t)strtol(str, &ptr, 10); if(ptr == str || *ptr != '\0') - return AW_BAD_ARGUMENT; - return AW_OK; + return R_BAD_ARG; + return R_OK; } -extern LOCAL_SYM enum aw_result +extern LOCAL_SYM res_T parse_floatX (float* f, const unsigned int count_min, diff --git a/src/aw_mtl.c b/src/aw_mtl.c @@ -73,12 +73,12 @@ map_copy_pod__(struct aw_map* dst, const struct aw_map* src) dst->bump_multiplier = src->bump_multiplier; } -static FINLINE int +static FINLINE res_T map_copy(struct aw_map* dst, const struct aw_map* src) { ASSERT(dst && src); if(dst == src) - return 0; + return R_OK; map_copy_pod__(dst, src); if(dst->filename) @@ -86,10 +86,10 @@ map_copy(struct aw_map* dst, const struct aw_map* src) if(src->filename) { dst->filename = mem_alloc(strlen(src->filename)+1); if(!dst->filename) - return -1; + return R_MEM_ERR; strcpy(dst->filename, src->filename); } - return 0; + return R_OK; } /******************************************************************************* @@ -133,33 +133,35 @@ material_copy_pod__(struct aw_material* dst, const struct aw_material* src) dst->illumination_model = src->illumination_model; } -static FINLINE int +static FINLINE res_T material_copy(struct aw_material* dst, const struct aw_material* src) { + res_T res; + if(dst == src) - return 0; + return R_OK; if(src->name) { if(dst->name) mem_free(dst->name); dst->name = mem_alloc(strlen(src->name) + 1); if(!dst->name) - return -1; + return R_MEM_ERR; strcpy(dst->name, src->name); } material_copy_pod__(dst, src); - if(map_copy(&dst->ambient_map, &src->ambient_map)) - return -1; - if(map_copy(&dst->diffuse_map, &src->diffuse_map)) - return -1; - if(map_copy(&dst->specular_map, &src->specular_map)) - return -1; - if(map_copy(&dst->specular_exponent_map, &src->specular_exponent_map)) - return -1; - if(map_copy(&dst->bump_map, &src->bump_map)) - return -1; - - return 0; + res = map_copy(&dst->ambient_map, &src->ambient_map); + if(res != R_OK) return res; + res = map_copy(&dst->diffuse_map, &src->diffuse_map); + if(res != R_OK) return res; + res = map_copy(&dst->specular_map, &src->specular_map); + if(res != R_OK) return res; + res = map_copy(&dst->specular_exponent_map, &src->specular_exponent_map); + if(res != R_OK) return res; + res = map_copy(&dst->bump_map, &src->bump_map); + if(res != R_OK) return res; + + return R_OK; } /******************************************************************************* @@ -187,17 +189,17 @@ struct aw_mtl { /******************************************************************************* * Helper functions ******************************************************************************/ -static enum aw_result +static res_T parse_name(char** name, char* tk, char** tk_ctxt) { char* buf = NULL; size_t buf_len = 0; size_t buf_size_max = 0; - enum aw_result res = AW_OK; + res_T res = R_OK; ASSERT(tk_ctxt && name); if(!tk) { - res = AW_BAD_ARGUMENT; + res = R_BAD_ARG; goto error; } @@ -209,7 +211,7 @@ parse_name(char** name, char* tk, char** tk_ctxt) buf_size_max = round_up_pow2(capacity); buf = mem_realloc(buf, buf_size_max); if(!buf) { - res = AW_MEMORY_ERROR; + res = R_MEM_ERR; goto error; } } @@ -230,54 +232,55 @@ error: goto exit; } -static enum aw_result +static res_T parse_newmtl(struct aw_mtl* mtl, char** word_tk) { char* word; size_t nmtls; - enum aw_result res; + res_T res; ASSERT(mtl && word_tk); word = strtok_r(NULL, "\n", word_tk); if(!word) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; nmtls = darray_material_size_get(&mtl->materials); - if(darray_material_resize(&mtl->materials, nmtls + 1)) - return AW_MEMORY_ERROR; + res = darray_material_resize(&mtl->materials, nmtls + 1); + if(res != R_OK) + return res; mtl->newmtl = darray_material_data_get(&mtl->materials) + nmtls; res = parse_name(&mtl->newmtl->name, word, word_tk); - if(res != AW_OK) { + if(res != R_OK) { darray_material_pop_back(&mtl->materials); mtl->newmtl = NULL; - return AW_MEMORY_ERROR; + return res; } - return AW_OK; + return R_OK; } -static enum aw_result +static res_T parse_color(struct aw_color* col, char** word_tk) { char* word; - enum aw_result res = AW_OK; + res_T res = R_OK; ASSERT(col && word_tk); word = strtok_r(NULL, " \t", word_tk); if(!word) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; if(!strcmp(word, "spectral")) { fprintf(stderr, "spectral colors are not supported\n"); - return AW_BAD_ARGUMENT; + return R_BAD_ARG; } col->color_space = strcmp(word, "xyz") == 0 ? AW_COLOR_XYZ : AW_COLOR_RGB; if(col->color_space == AW_COLOR_XYZ && !(word = strtok_r(NULL, " \t", word_tk))) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; - if(AW_OK != (res = string_to_float(word, &col->value[0]))) + if(R_OK != (res = string_to_float(word, &col->value[0]))) return res; /* If only the first component is defined the second and third components are @@ -286,32 +289,32 @@ parse_color(struct aw_color* col, char** word_tk) if(!word) { col->value[1] = col->value[2] = col->value[0]; } else { - if(AW_OK != (res = string_to_float(word, &col->value[1]))) + if(R_OK != (res = string_to_float(word, &col->value[1]))) return res; word = strtok_r(NULL, " \t", word_tk); - if(AW_OK != (res = string_to_float(word, &col->value[2]))) + if(R_OK != (res = string_to_float(word, &col->value[2]))) return res; } - return AW_OK; + return R_OK; } -static INLINE enum aw_result +static INLINE res_T parse_size_t (size_t* s, const size_t range_min, const size_t range_max, char** word_tk) { char* word; - enum aw_result res = AW_OK; + res_T res = R_OK; ASSERT(s && word_tk && range_min < range_max); word = strtok_r(NULL, "\n", word_tk); - if(AW_OK != (res = string_to_size_t(word, s))) + if(R_OK != (res = string_to_size_t(word, s))) return res; if(range_min > *s || range_max < *s) - return AW_BAD_ARGUMENT; - return AW_OK; + return R_BAD_ARG; + return R_OK; } -static enum aw_result +static res_T parse_bool_option (int* options_mask, const enum aw_map_flag option, @@ -321,23 +324,23 @@ parse_bool_option ASSERT(options_mask && tk_ctxt); word = strtok_r(NULL, " \t", tk_ctxt); if(!word) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; if(strcmp(word, "on") == 0) { *options_mask |= (int)option; } else if(strcmp(word, "off") != 0) { - return AW_BAD_ARGUMENT; + return R_BAD_ARG; } - return AW_OK; + return R_OK; } -static FINLINE enum aw_result +static FINLINE res_T parse_imfchan_option(enum aw_map_channel* channel, char** tk_ctxt) { char* word; ASSERT(channel && tk_ctxt); word = strtok_r(NULL, " \t", tk_ctxt); if(!word) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; if(!strcmp(word, "r")) { *channel = AW_MAP_CHANNEL_RED; } else if(!strcmp(word, "g")) { @@ -351,12 +354,12 @@ parse_imfchan_option(enum aw_map_channel* channel, char** tk_ctxt) } else if(!strcmp(word, "z")) { *channel = AW_MAP_CHANNEL_DEPTH; } else { - return AW_BAD_ARGUMENT; + return R_BAD_ARG; } - return AW_OK; + return R_OK; } -static enum aw_result +static res_T parse_map (struct aw_map* map, const enum map_type type, @@ -367,7 +370,7 @@ parse_map word = strtok_r(NULL, " \t", tk_ctxt); while(word) { - enum aw_result res; + res_T res; if(!strcmp(word, "-blendu")) { res = parse_bool_option(&map->options_mask, AW_MAP_BLEND_U, tk_ctxt); @@ -383,7 +386,7 @@ parse_map } else if(!strcmp(word, "-mm")) { /* Image bias and scale */ res = parse_floatX (&map->image_bias, 1, 1, -FLT_MAX, FLT_MAX, 0.f, tk_ctxt); - if(res == AW_OK) { + if(res == R_OK) { res = parse_floatX (&map->image_scale, 1, 1, -FLT_MAX, FLT_MAX, 0.f, tk_ctxt); } @@ -406,17 +409,17 @@ parse_map mem_free(map->filename); res = parse_name(&map->filename, word, tk_ctxt); } - if(res != AW_OK) + if(res != R_OK) return res; word = strtok_r(NULL, " \t", tk_ctxt); } - return AW_OK; + return R_OK; } -static enum aw_result +static res_T parse_mtl_line(struct aw_mtl* mtl, char* line) { - enum aw_result res = AW_OK; + res_T res = R_OK; char* word, *word_tk; ASSERT(mtl && line); @@ -425,7 +428,7 @@ parse_mtl_line(struct aw_mtl* mtl, char* line) if(!strcmp(word, "newmtl")) { /* Material name declaration */ res = parse_newmtl(mtl, &word_tk); } else if(mtl->newmtl == NULL) { - res = AW_BAD_ARGUMENT; + res = R_BAD_ARG; } else if(!strcmp(word, "Ka")) { /* Ambient reflectivity */ res = parse_color(&mtl->newmtl->ambient, &word_tk); } else if(!strcmp(word, "Kd")) { /* Diffuse reflectivity */ @@ -454,17 +457,17 @@ parse_mtl_line(struct aw_mtl* mtl, char* line) } else if(!strcmp(word, "bump")) { /* Bump map */ res = parse_map(&mtl->newmtl->bump_map, MAP_BUMP, &word_tk); } else { - res = AW_OK; + res = R_OK; fprintf(stderr, "%s:%lu: warning: ignored or malformed directive %s\n", mtl->filename, (unsigned long)mtl->iline, word); while((word = strtok_r(NULL, " \t", &word_tk))); } - if(res != AW_OK) + if(res != R_OK) goto error; if((word = strtok_r(NULL, " ", &word_tk))) { fprintf(stderr, "%s:%lu: unexpected directive %s\n", mtl->filename, (unsigned long)mtl->iline, word); - res = AW_BAD_ARGUMENT; + res = R_BAD_ARG; goto error; } } @@ -496,23 +499,23 @@ mtl_release(ref_T* ref) /******************************************************************************* * Exported functions ******************************************************************************/ -enum aw_result +res_T aw_mtl_create (struct mem_allocator* mem_allocator, struct aw_mtl** mtl_out) { struct mem_allocator* allocator; struct aw_mtl* mtl = NULL; - enum aw_result res = AW_OK; + res_T res = R_OK; if(!mtl_out) { - res = AW_BAD_ARGUMENT; + res = R_BAD_ARG; goto error; } allocator = mem_allocator ? mem_allocator : &mem_default_allocator; mtl = MEM_CALLOC(allocator, 1, sizeof(struct aw_mtl)); if(!mtl) { - res = AW_MEMORY_ERROR; + res = R_MEM_ERR; goto error; } mtl->allocator = allocator; @@ -531,38 +534,38 @@ error: goto exit; } -enum aw_result +res_T aw_mtl_ref_get(struct aw_mtl* mtl) { if(!mtl) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; ref_get(&mtl->ref); - return AW_OK; + return R_OK; } -enum aw_result +res_T aw_mtl_ref_put(struct aw_mtl* mtl) { if(!mtl) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; ref_put(&mtl->ref, mtl_release); - return AW_OK; + return R_OK; } -enum aw_result +res_T aw_mtl_load(struct aw_mtl* mtl, const char* filename) { FILE* file; - enum aw_result res = AW_OK; + res_T res = R_OK; if(!mtl || !filename) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; mtl->filename = filename; file = fopen(filename, "r"); if(!file) { fprintf(stderr, "Error opening `%s'\n", filename); - return AW_BAD_ARGUMENT; + return R_BAD_ARG; } res = aw_mtl_load_stream(mtl, file); @@ -571,24 +574,23 @@ aw_mtl_load(struct aw_mtl* mtl, const char* filename) return res; } -enum aw_result +res_T aw_mtl_load_stream(struct aw_mtl* mtl, FILE* stream) { char* line; struct darray_char buf; const unsigned buf_chunk = 256; - enum aw_result res = AW_OK; + res_T res = R_OK; if(!mtl || !stream) { - res = AW_BAD_ARGUMENT; + res = R_BAD_ARG; goto error; } darray_char_init(mtl->allocator, &buf); - if(darray_char_resize(&buf, buf_chunk)) { - res = AW_MEMORY_ERROR; + res = darray_char_resize(&buf, buf_chunk); + if(res != R_OK) goto error; - } if(!mtl->filename) mtl->filename = "stream"; @@ -599,10 +601,9 @@ aw_mtl_load_stream(struct aw_mtl* mtl, FILE* stream) size_t last_char; while(!strrchr(line,'\n')) { /* Ensure that the whole line was read */ - if(darray_char_resize(&buf, darray_char_size_get(&buf) + buf_chunk)) { - res = AW_MEMORY_ERROR; + res = darray_char_resize(&buf, darray_char_size_get(&buf) + buf_chunk); + if(res != R_OK) goto error; - } line = darray_char_data_get(&buf); if(!fgets(line + strlen(line), (int)buf_chunk, stream)) /* EOF */ break; @@ -611,7 +612,7 @@ aw_mtl_load_stream(struct aw_mtl* mtl, FILE* stream) if(line[last_char] == '\n') /* Remove the newline character */ line[last_char] = '\0'; - if(AW_OK != (res = parse_mtl_line(mtl, line))) + if(R_OK != (res = parse_mtl_line(mtl, line))) goto error; ++mtl->iline; } @@ -626,24 +627,24 @@ error: goto exit; } -enum aw_result +res_T aw_mtl_materials_count_get(struct aw_mtl* mtl, size_t* nmtls) { if(!mtl || !nmtls) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; *nmtls = darray_material_size_get(&mtl->materials); - return AW_OK; + return R_OK; } -enum aw_result +res_T aw_mtl_material_get (struct aw_mtl* mtl, const size_t imaterial, const struct aw_material** material) { if(!mtl || !material || imaterial>=darray_material_size_get(&mtl->materials)) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; *material = darray_material_cdata_get(&mtl->materials) + imaterial; - return AW_OK; + return R_OK; } diff --git a/src/aw_obj.c b/src/aw_obj.c @@ -56,7 +56,7 @@ named_group_release(struct named_group* grp) str_release(&grp->name); } -static INLINE int +static INLINE res_T named_group_copy(struct named_group* dst, const struct named_group* src) { ASSERT(dst && src); @@ -65,7 +65,7 @@ named_group_copy(struct named_group* dst, const struct named_group* src) return str_copy(&dst->name, &src->name); } -static INLINE int +static INLINE res_T named_group_copy_and_release(struct named_group* dst, struct named_group* src) { ASSERT(dst && src); @@ -179,7 +179,7 @@ flush_smooth_group(struct aw_obj* obj) grp->faces_count = nfaces - grp->face_id; } -static enum aw_result +static res_T parse_floatX_in_darray (struct darray_float* darray, const unsigned int count_min, @@ -187,28 +187,29 @@ parse_floatX_in_darray const float default_value, char** tk_ctxt) { - enum aw_result res; + res_T res; size_t i; ASSERT(darray); i = darray_float_size_get(darray); - if(darray_float_resize(darray, i + count_max)) - return AW_MEMORY_ERROR; + res = darray_float_resize(darray, i + count_max); + if(res != R_OK) + return res; res = parse_floatX (darray_float_data_get(darray) + i, count_min, count_max, -FLT_MAX, FLT_MAX, default_value, tk_ctxt); - if(res != AW_OK) + if(res != R_OK) darray_float_resize(darray, i); return res; } -static enum aw_result +static res_T parse_face(struct aw_obj* obj, char** word_tk) { struct aw_obj_face face; char* word; - enum aw_result res = AW_OK; + res_T res = R_OK; ASSERT(obj && word_tk); face.vertex_id = darray_vertex_size_get(&obj->vertices); @@ -226,7 +227,7 @@ parse_face(struct aw_obj* obj, char** word_tk) /* position index */ id_pos = strtok_r(word, "/", &id_tk); res = string_to_size_t(id_pos, &vert.iposition); - if(res != AW_OK) + if(res != R_OK) goto error; --vert.iposition; /* Match C memory layout */ if((id = strtok_r(NULL, "/", &id_tk))) { @@ -235,32 +236,30 @@ parse_face(struct aw_obj* obj, char** word_tk) goto error; if(id == id_pos + 2) { /* `//' separator => No tex */ /* normal index */ - if(AW_OK != (res = string_to_size_t(id, &vert.inormal))) + if(R_OK != (res = string_to_size_t(id, &vert.inormal))) goto error; --vert.inormal; /* Match C memory layout */ } else { /* texcoord index */ - if(AW_OK != (res = string_to_size_t(id, &vert.itexcoord))) + if(R_OK != (res = string_to_size_t(id, &vert.itexcoord))) goto error; --vert.itexcoord; /* Match C memory latout */ /* normal index */ if((id = strtok_r(NULL, "/", &id_tk))) { - if(AW_OK != (res = string_to_size_t(id, &vert.inormal))) + if(R_OK != (res = string_to_size_t(id, &vert.inormal))) goto error; --vert.inormal; /* Match C memory layout */ } } } - if(darray_vertex_push_back(&obj->vertices, &vert)) { - res = AW_MEMORY_ERROR; + res = darray_vertex_push_back(&obj->vertices, &vert); + if(res != R_OK) goto error; - } ++face.vertices_count; } - if(darray_face_push_back(&obj->faces, &face)) { - res = AW_MEMORY_ERROR; + res = darray_face_push_back(&obj->faces, &face); + if(res != R_OK) goto error; - } exit: return res; @@ -270,36 +269,33 @@ error: goto exit; } -static enum aw_result +static res_T parse_group(struct aw_obj* obj, char** word_tk) { char* word; size_t ngrps = 0, igrp = 0; - enum aw_result res = AW_OK; + res_T res = R_OK; ASSERT(obj && word_tk); flush_groups(obj); word = strtok_r(NULL, " \t", word_tk); if(!word) { - res = AW_BAD_ARGUMENT; + res = R_BAD_ARG; goto error; } - #define CALL(Func) { if(Func) { res = AW_MEMORY_ERROR; goto error; } }(void)0 ngrps = igrp = darray_named_group_size_get(&obj->groups); obj->igroups_active = ngrps; do { struct named_group* grp = NULL; - if(darray_named_group_resize(&obj->groups, igrp + 1)) { - res = AW_MEMORY_ERROR; + res = darray_named_group_resize(&obj->groups, igrp + 1); + if(res != R_OK) goto error; - } grp = darray_named_group_data_get(&obj->groups) + ngrps; ++igrp; - if(str_set(&grp->name, word)) { - res = AW_MEMORY_ERROR; + res = str_set(&grp->name, word); + if(res != R_OK) goto error; - } grp->iface = darray_face_size_get(&obj->faces); grp->nfaces = 0; } while((word = strtok_r(NULL, " \t", word_tk))); @@ -308,16 +304,16 @@ exit: return res; error: if(igrp != ngrps) - CHECK(darray_named_group_resize(&obj->groups, ngrps), 0); + CHECK(darray_named_group_resize(&obj->groups, ngrps), R_OK); goto exit; } -static enum aw_result +static res_T parse_smooth_group(struct aw_obj* obj, char** word_tk) { char* word; struct aw_obj_smooth_group grp; - enum aw_result res; + res_T res; size_t i; ASSERT(obj && word_tk); @@ -330,83 +326,80 @@ parse_smooth_group(struct aw_obj* obj, char** word_tk) grp.is_smoothed = 1; } else { res = string_to_size_t(word, &i); - if(res != AW_OK) + if(res != R_OK) return res; grp.is_smoothed = i != 0; } grp.face_id = darray_face_size_get(&obj->faces); grp.faces_count = 0; - if(darray_smooth_group_push_back(&obj->smooth_groups, &grp)) - return AW_MEMORY_ERROR; + res = darray_smooth_group_push_back(&obj->smooth_groups, &grp); + if(res != R_OK) + return res; - return AW_OK; + return R_OK; } -static enum aw_result +static res_T parse_mtllib(struct aw_obj* obj, char** word_tk) { char* word; size_t imtllib = 0; size_t nmtllibs = 0; - enum aw_result res = AW_OK; + res_T res = R_OK; ASSERT(obj && word_tk); word = strtok_r(NULL, " \t", word_tk); if(!word) { - res = AW_BAD_ARGUMENT; + res = R_BAD_ARG; goto error; } nmtllibs = imtllib = darray_mtllib_size_get(&obj->mtllibs); do { struct str* str; - if(darray_mtllib_resize(&obj->mtllibs, imtllib + 1)) { - res = AW_MEMORY_ERROR; + res = darray_mtllib_resize(&obj->mtllibs, imtllib + 1); + if(res != R_OK) goto error; - } str = darray_mtllib_data_get(&obj->mtllibs) + imtllib; ++imtllib; - if(str_set(str, word)) { - res = AW_MEMORY_ERROR; + res = str_set(str, word); + if(res != R_OK) goto error; - } } while((word = strtok_r(NULL, " \t", word_tk))); exit: return res; error: if(imtllib != nmtllibs) - CHECK(darray_mtllib_resize(&obj->mtllibs, nmtllibs), 0); + CHECK(darray_mtllib_resize(&obj->mtllibs, nmtllibs), R_OK); goto exit; } -static enum aw_result +static res_T parse_usemtl(struct aw_obj* obj, char** word_tk) { char* word; struct named_group* mtl = NULL; size_t nmtls; - enum aw_result res = AW_OK; + res_T res = R_OK; ASSERT(obj && word_tk); flush_usemtl(obj); word= strtok_r(NULL, " \t", word_tk); if(!word_tk) { - res = AW_BAD_ARGUMENT; + res = R_BAD_ARG; goto error; } nmtls = darray_named_group_size_get(&obj->usemtls); - if(darray_named_group_resize(&obj->usemtls, nmtls + 1)) { - res = AW_MEMORY_ERROR; + res = darray_named_group_resize(&obj->usemtls, nmtls + 1); + if(res != R_OK) goto error; - } mtl = darray_named_group_data_get(&obj->usemtls) + nmtls; - if(str_set(&mtl->name, word)) { - res = AW_MEMORY_ERROR; + res = str_set(&mtl->name, word); + if(res != R_OK) goto error; - } mtl->iface = darray_face_size_get(&obj->faces); mtl->nfaces = 0; @@ -418,11 +411,11 @@ error: goto exit; } -static enum aw_result +static res_T parse_obj_line(struct aw_obj* obj, char* line) { char* word, *word_tk; - enum aw_result res = AW_OK; + res_T res = R_OK; ASSERT(obj && line); word = strtok_r(line, " \t", &word_tk); @@ -446,23 +439,23 @@ parse_obj_line(struct aw_obj* obj, char* line) } else if(!strcmp(word, "usemtl")) { /* Use the mtl library */ res = parse_usemtl(obj, &word_tk); } else { - res = AW_OK; + res = R_OK; fprintf(stderr, "%s:%lu: warning: ignored or malformed directive %s", obj->filename, (unsigned long)obj->iline, word); } - if(res != AW_OK) + if(res != R_OK) goto error; if((word = strtok_r(NULL, " ", &word_tk))) { fprintf(stderr, "%s:%lu: unexpected directive %s\n", obj->filename, (unsigned long)obj->iline, word); - res = AW_BAD_ARGUMENT; + res = R_BAD_ARG; goto error; } } exit: return res; error: - fprintf(stderr, "%s:%lu: error: parsing failed\n", + fprintf(stderr, "%s:%lu: error: parsing failed\n", obj->filename, (unsigned long)obj->iline); goto exit; } @@ -503,23 +496,23 @@ obj_release(ref_T* ref) /******************************************************************************* * Exported functions ******************************************************************************/ -enum aw_result +res_T aw_obj_create (struct mem_allocator* mem_allocator, struct aw_obj** obj_out) { struct mem_allocator* allocator; struct aw_obj* obj = NULL; - enum aw_result res = AW_OK; + res_T res = R_OK; if(!obj_out) { - res = AW_BAD_ARGUMENT; + res = R_BAD_ARG; goto error; } allocator = mem_allocator ? mem_allocator : &mem_default_allocator; obj = MEM_CALLOC(allocator, 1, sizeof(struct aw_obj)); if(!obj) { - res = AW_MEMORY_ERROR; + res = R_MEM_ERR; goto error; } obj->allocator = allocator; @@ -546,38 +539,38 @@ error: goto exit; } -enum aw_result +res_T aw_obj_ref_get(struct aw_obj* obj) { if(!obj) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; ref_get(&obj->ref); - return AW_OK; + return R_OK; } -enum aw_result +res_T aw_obj_ref_put(struct aw_obj* obj) { if(!obj) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; ref_put(&obj->ref, obj_release); - return AW_OK; + return R_OK; } -enum aw_result +res_T aw_obj_load(struct aw_obj* obj, const char* filename) { FILE* file; - enum aw_result res = AW_OK; + res_T res = R_OK; if(!obj || !filename) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; obj->filename = filename; file = fopen(filename, "r"); if(!file) { fprintf(stderr, "Error opening `%s'\n", filename); - return AW_BAD_ARGUMENT; + return R_BAD_ARG; } res = aw_obj_load_stream(obj, file); @@ -586,24 +579,23 @@ aw_obj_load(struct aw_obj* obj, const char* filename) return res; } -enum aw_result +res_T aw_obj_load_stream(struct aw_obj* obj, FILE* stream) { char* line; struct darray_char buf; const unsigned buf_chunk = 256; - enum aw_result res = AW_OK; + res_T res = R_OK; if(!obj || !stream) { - res = AW_BAD_ARGUMENT; + res = R_BAD_ARG; goto error; } darray_char_init(obj->allocator, &buf); - if(darray_char_resize(&buf, buf_chunk)) { - res = AW_MEMORY_ERROR; + res = darray_char_resize(&buf, buf_chunk); + if(res != R_OK) goto error; - } if(!obj->filename) obj->filename = "stream"; @@ -614,10 +606,10 @@ aw_obj_load_stream(struct aw_obj* obj, FILE* stream) size_t last_char; while(!strrchr(line,'\n')) { /* Ensure that the whole line was read */ - if(darray_char_resize(&buf, darray_char_size_get(&buf) + buf_chunk)) { - res = AW_MEMORY_ERROR; + res = darray_char_resize(&buf, darray_char_size_get(&buf) + buf_chunk); + if(res != R_OK) goto error; - } + line = darray_char_data_get(&buf); if(!fgets(line + strlen(line), (int)buf_chunk, stream)) /* EOF */ break; @@ -626,7 +618,7 @@ aw_obj_load_stream(struct aw_obj* obj, FILE* stream) if(line[last_char] == '\n') /* Remove the newline character */ line[last_char] = '\0'; - if(AW_OK != (res = parse_obj_line(obj, line))) + if(R_OK != (res = parse_obj_line(obj, line))) goto error; ++obj->iline; } @@ -645,44 +637,44 @@ error: } -enum aw_result +res_T aw_obj_desc_get(struct aw_obj* obj, struct aw_obj_desc* desc) { if(!obj || !desc) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; desc->faces_count = darray_face_size_get(&obj->faces); desc->groups_count = darray_named_group_size_get(&obj->groups); desc->smooth_groups_count = darray_smooth_group_size_get(&obj->smooth_groups); desc->usemtls_count = darray_named_group_size_get(&obj->usemtls); desc->mtllibs_count = darray_mtllib_size_get(&obj->mtllibs); - return AW_OK; + return R_OK; } -enum aw_result +res_T aw_obj_face_get (const struct aw_obj* obj, const size_t iface, struct aw_obj_face* face) { if(!obj || !face || iface >= darray_face_size_get(&obj->faces)) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; *face = darray_face_cdata_get(&obj->faces)[iface]; - return AW_OK; + return R_OK; } -enum aw_result +res_T aw_obj_group_get (const struct aw_obj* obj, const size_t igroup, struct aw_obj_group* grp) { const struct named_group* group; if(!obj || !grp || igroup >= darray_named_group_size_get(&obj->groups)) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; group = darray_named_group_cdata_get(&obj->groups) + igroup; grp->name = str_cget(&group->name); grp->face_id = group->iface; grp->faces_count = group->nfaces; - return AW_OK; + return R_OK; } -enum aw_result +res_T aw_obj_smooth_group_get (const struct aw_obj* obj, const size_t ismooth_group, @@ -690,33 +682,33 @@ aw_obj_smooth_group_get { if(!obj || !group || ismooth_group >= darray_smooth_group_size_get(&obj->smooth_groups)) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; *group = darray_smooth_group_cdata_get(&obj->smooth_groups)[ismooth_group]; - return AW_OK; + return R_OK; } -enum aw_result +res_T aw_obj_mtl_get (const struct aw_obj* obj, const size_t imtl, struct aw_obj_mtl* mtl) { const struct named_group* group; if(!obj || !mtl || imtl >= darray_named_group_size_get(&obj->usemtls)) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; group = darray_named_group_cdata_get(&obj->usemtls) + imtl; mtl->name = str_cget(&group->name); mtl->face_id = group->iface; mtl->faces_count = group->nfaces; - return AW_OK; + return R_OK; } -enum aw_result +res_T aw_obj_vertex_get (const struct aw_obj* obj, const size_t ivertex, struct aw_obj_vertex* vertex) { const struct vertex* vert; const float* data; if(!obj || !vertex || ivertex >= darray_vertex_size_get(&obj->vertices)) - return AW_BAD_ARGUMENT; + return R_BAD_ARG; vert = darray_vertex_cdata_get(&obj->vertices) + ivertex; /* Fetch vertex position */ @@ -737,6 +729,6 @@ aw_obj_vertex_get data = darray_float_cdata_get(&obj->normals) + vert->inormal * 3; f3_set(vertex->normal, data); } - return AW_OK; + return R_OK; } diff --git a/src/test_aw_mtl.c b/src/test_aw_mtl.c @@ -58,26 +58,26 @@ test_common(struct aw_mtl* mtl) fwrite(mtl_common, sizeof(char), strlen(mtl_common), file); fclose(file); - CHECK(aw_mtl_load(NULL, NULL), AW_BAD_ARGUMENT); - CHECK(aw_mtl_load(mtl, NULL), AW_BAD_ARGUMENT); - CHECK(aw_mtl_load(NULL, "test_mtl_common.mtl"), AW_BAD_ARGUMENT); - CHECK(aw_mtl_load(mtl, "test_mtl_common.mtl"), AW_OK); + CHECK(aw_mtl_load(NULL, NULL), R_BAD_ARG); + CHECK(aw_mtl_load(mtl, NULL), R_BAD_ARG); + CHECK(aw_mtl_load(NULL, "test_mtl_common.mtl"), R_BAD_ARG); + CHECK(aw_mtl_load(mtl, "test_mtl_common.mtl"), R_OK); - CHECK(aw_mtl_materials_count_get(NULL, NULL), AW_BAD_ARGUMENT); - CHECK(aw_mtl_materials_count_get(mtl, NULL), AW_BAD_ARGUMENT); - CHECK(aw_mtl_materials_count_get(NULL, &nmtls), AW_BAD_ARGUMENT); - CHECK(aw_mtl_materials_count_get(mtl, &nmtls), AW_OK); + CHECK(aw_mtl_materials_count_get(NULL, NULL), R_BAD_ARG); + CHECK(aw_mtl_materials_count_get(mtl, NULL), R_BAD_ARG); + CHECK(aw_mtl_materials_count_get(NULL, &nmtls), R_BAD_ARG); + CHECK(aw_mtl_materials_count_get(mtl, &nmtls), R_OK); CHECK(nmtls, 1); - CHECK(aw_mtl_material_get(NULL, SIZE_MAX, NULL), AW_BAD_ARGUMENT); - CHECK(aw_mtl_material_get(mtl, SIZE_MAX, NULL), AW_BAD_ARGUMENT); - CHECK(aw_mtl_material_get(NULL, 0, NULL), AW_BAD_ARGUMENT); - CHECK(aw_mtl_material_get(mtl, 0, NULL), AW_BAD_ARGUMENT); - CHECK(aw_mtl_material_get(NULL, SIZE_MAX, &mtr), AW_BAD_ARGUMENT); - CHECK(aw_mtl_material_get(mtl, SIZE_MAX, &mtr), AW_BAD_ARGUMENT); - CHECK(aw_mtl_material_get(NULL, 0, &mtr), AW_BAD_ARGUMENT); - CHECK(aw_mtl_material_get(mtl, 0, &mtr), AW_OK); + CHECK(aw_mtl_material_get(NULL, SIZE_MAX, NULL), R_BAD_ARG); + CHECK(aw_mtl_material_get(mtl, SIZE_MAX, NULL), R_BAD_ARG); + CHECK(aw_mtl_material_get(NULL, 0, NULL), R_BAD_ARG); + CHECK(aw_mtl_material_get(mtl, 0, NULL), R_BAD_ARG); + CHECK(aw_mtl_material_get(NULL, SIZE_MAX, &mtr), R_BAD_ARG); + CHECK(aw_mtl_material_get(mtl, SIZE_MAX, &mtr), R_BAD_ARG); + CHECK(aw_mtl_material_get(NULL, 0, &mtr), R_BAD_ARG); + CHECK(aw_mtl_material_get(mtl, 0, &mtr), R_OK); CHECK(strcmp(mtr->name, "my_mtl"), 0); CHECK(mtr->ambient.color_space, AW_COLOR_RGB); @@ -195,14 +195,14 @@ test_multiple_materials(struct aw_mtl* mtl) fwrite(mtl_multi, sizeof(char), strlen(mtl_multi), file); CHECK(fseek(file, 0, SEEK_SET), 0); - CHECK(aw_mtl_load_stream(NULL, NULL), AW_BAD_ARGUMENT); - CHECK(aw_mtl_load_stream(mtl, NULL), AW_BAD_ARGUMENT); - CHECK(aw_mtl_load_stream(NULL, file), AW_BAD_ARGUMENT); - CHECK(aw_mtl_load_stream(mtl, file), AW_OK); - CHECK(aw_mtl_materials_count_get(mtl, &nmtls), AW_OK); + CHECK(aw_mtl_load_stream(NULL, NULL), R_BAD_ARG); + CHECK(aw_mtl_load_stream(mtl, NULL), R_BAD_ARG); + CHECK(aw_mtl_load_stream(NULL, file), R_BAD_ARG); + CHECK(aw_mtl_load_stream(mtl, file), R_OK); + CHECK(aw_mtl_materials_count_get(mtl, &nmtls), R_OK); CHECK(nmtls, 3); - CHECK(aw_mtl_material_get(mtl, 0, &mtr), AW_OK); + CHECK(aw_mtl_material_get(mtl, 0, &mtr), R_OK); CHECK(strcmp(mtr->name, "material_0"), 0); CHECK(mtr->specular_exponent, 8.f); CHECK(mtr->refraction_index, 1.5f); @@ -230,7 +230,7 @@ test_multiple_materials(struct aw_mtl* mtl) CHECK(mtr->specular_exponent_map.filename, NULL); CHECK(mtr->bump_map.filename, NULL); - CHECK(aw_mtl_material_get(mtl, 1, &mtr), AW_OK); + CHECK(aw_mtl_material_get(mtl, 1, &mtr), R_OK); CHECK(strcmp(mtr->name, "textured_material"), 0); CHECK(mtr->specular_exponent, 6.f); CHECK(mtr->refraction_index, (float)1.7f); @@ -250,7 +250,7 @@ test_multiple_materials(struct aw_mtl* mtl) CHECK(mtr->bump_map.bump_multiplier, (float)0.2f); CHECK(mtr->specular_exponent_map.filename, NULL); - CHECK(aw_mtl_material_get(mtl, 2, &mtr), AW_OK); + CHECK(aw_mtl_material_get(mtl, 2, &mtr), R_OK); CHECK(strcmp(mtr->name, "hello_world"), 0); CHECK(mtr->specular_exponent, 8.f); CHECK(mtr->refraction_index, 1.5f); @@ -295,8 +295,8 @@ test_unloadable(struct aw_mtl* mtl) fwrite(mtl0, sizeof(char), strlen(mtl0), file); fclose(file); - CHECK(aw_mtl_load(mtl, "mtl0.mtl"), AW_BAD_ARGUMENT); - CHECK(aw_mtl_materials_count_get(mtl, &nmtls), AW_OK); + CHECK(aw_mtl_load(mtl, "mtl0.mtl"), R_BAD_ARG); + CHECK(aw_mtl_materials_count_get(mtl, &nmtls), R_OK); CHECK(nmtls, 0); } int @@ -308,23 +308,23 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(aw_mtl_create(NULL, NULL), AW_BAD_ARGUMENT); - CHECK(aw_mtl_create(&allocator, NULL), AW_BAD_ARGUMENT); - CHECK(aw_mtl_create(NULL, &mtl), AW_OK); + 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_ref_get(NULL), AW_BAD_ARGUMENT); - CHECK(aw_mtl_ref_get(mtl), AW_OK); - CHECK(aw_mtl_ref_put(NULL), AW_BAD_ARGUMENT); - CHECK(aw_mtl_ref_put(mtl), AW_OK); - CHECK(aw_mtl_ref_put(mtl), AW_OK); + CHECK(aw_mtl_ref_get(NULL), R_BAD_ARG); + CHECK(aw_mtl_ref_get(mtl), R_OK); + CHECK(aw_mtl_ref_put(NULL), R_BAD_ARG); + CHECK(aw_mtl_ref_put(mtl), R_OK); + CHECK(aw_mtl_ref_put(mtl), R_OK); - CHECK(aw_mtl_create(&allocator, &mtl), AW_OK); + CHECK(aw_mtl_create(&allocator, &mtl), R_OK); test_common(mtl); test_multiple_materials(mtl); test_unloadable(mtl); - CHECK(aw_mtl_ref_put(mtl), AW_OK); + CHECK(aw_mtl_ref_put(mtl), R_OK); if(MEM_ALLOCATED_SIZE(&allocator)) { char dump[512]; diff --git a/src/test_aw_obj.c b/src/test_aw_obj.c @@ -54,66 +54,66 @@ test_plane(struct aw_obj* obj) fwrite(plane_obj, sizeof(char), strlen(plane_obj), file); fclose(file); - CHECK(aw_obj_load(NULL, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_load(obj, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_load(NULL, "test_obj_plane.obj"), AW_BAD_ARGUMENT); - CHECK(aw_obj_load(obj, "none.obj"), AW_BAD_ARGUMENT); - CHECK(aw_obj_load(obj, "test_obj_plane.obj"), AW_OK); - - CHECK(aw_obj_desc_get(NULL, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_desc_get(obj, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_desc_get(NULL, &desc), AW_BAD_ARGUMENT); - CHECK(aw_obj_desc_get(obj, &desc), AW_OK); + CHECK(aw_obj_load(NULL, NULL), R_BAD_ARG); + CHECK(aw_obj_load(obj, NULL), R_BAD_ARG); + CHECK(aw_obj_load(NULL, "test_obj_plane.obj"), R_BAD_ARG); + CHECK(aw_obj_load(obj, "none.obj"), R_BAD_ARG); + CHECK(aw_obj_load(obj, "test_obj_plane.obj"), R_OK); + + CHECK(aw_obj_desc_get(NULL, NULL), R_BAD_ARG); + CHECK(aw_obj_desc_get(obj, NULL), R_BAD_ARG); + CHECK(aw_obj_desc_get(NULL, &desc), R_BAD_ARG); + CHECK(aw_obj_desc_get(obj, &desc), R_OK); CHECK(desc.faces_count, 1); CHECK(desc.groups_count, 0); CHECK(desc.smooth_groups_count, 0); CHECK(desc.usemtls_count, 1); CHECK(desc.mtllibs_count, 1); - CHECK(aw_obj_face_get(NULL, AW_ID_NONE, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_face_get(obj, AW_ID_NONE, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_face_get(NULL, 0, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_face_get(obj, 0, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_face_get(NULL, AW_ID_NONE, &face), AW_BAD_ARGUMENT); - CHECK(aw_obj_face_get(obj, AW_ID_NONE, &face), AW_BAD_ARGUMENT); - CHECK(aw_obj_face_get(NULL, 0, &face), AW_BAD_ARGUMENT); - CHECK(aw_obj_face_get(obj, 0, &face), AW_OK); + CHECK(aw_obj_face_get(NULL, AW_ID_NONE, NULL), R_BAD_ARG); + CHECK(aw_obj_face_get(obj, AW_ID_NONE, NULL), R_BAD_ARG); + CHECK(aw_obj_face_get(NULL, 0, NULL), R_BAD_ARG); + CHECK(aw_obj_face_get(obj, 0, NULL), R_BAD_ARG); + CHECK(aw_obj_face_get(NULL, AW_ID_NONE, &face), R_BAD_ARG); + CHECK(aw_obj_face_get(obj, AW_ID_NONE, &face), R_BAD_ARG); + CHECK(aw_obj_face_get(NULL, 0, &face), R_BAD_ARG); + CHECK(aw_obj_face_get(obj, 0, &face), R_OK); CHECK(face.vertex_id, 0); CHECK(face.vertices_count, 4); CHECK(face.group_id, AW_ID_NONE); CHECK(face.smooth_group_id, AW_ID_NONE); CHECK(face.mtl_id, 0); - CHECK(aw_obj_mtl_get(NULL, AW_ID_NONE, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_mtl_get(obj, AW_ID_NONE, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_mtl_get(NULL, 0, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_mtl_get(obj, 0, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_mtl_get(NULL, AW_ID_NONE, &mtl), AW_BAD_ARGUMENT); - CHECK(aw_obj_mtl_get(obj, AW_ID_NONE, &mtl), AW_BAD_ARGUMENT); - CHECK(aw_obj_mtl_get(NULL, 0, &mtl), AW_BAD_ARGUMENT); - CHECK(aw_obj_mtl_get(obj, 0, &mtl), AW_OK); + CHECK(aw_obj_mtl_get(NULL, AW_ID_NONE, NULL), R_BAD_ARG); + CHECK(aw_obj_mtl_get(obj, AW_ID_NONE, NULL), R_BAD_ARG); + CHECK(aw_obj_mtl_get(NULL, 0, NULL), R_BAD_ARG); + CHECK(aw_obj_mtl_get(obj, 0, NULL), R_BAD_ARG); + CHECK(aw_obj_mtl_get(NULL, AW_ID_NONE, &mtl), R_BAD_ARG); + CHECK(aw_obj_mtl_get(obj, AW_ID_NONE, &mtl), R_BAD_ARG); + CHECK(aw_obj_mtl_get(NULL, 0, &mtl), R_BAD_ARG); + CHECK(aw_obj_mtl_get(obj, 0, &mtl), R_OK); CHECK(strcmp(mtl.name, "wood"), 0); CHECK(mtl.face_id, 0); CHECK(mtl.faces_count, 1); - CHECK(aw_obj_vertex_get(NULL, AW_ID_NONE, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_vertex_get(obj, AW_ID_NONE, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_vertex_get(NULL, 0, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_vertex_get(obj, 0, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_vertex_get(NULL, AW_ID_NONE, &vertex), AW_BAD_ARGUMENT); - CHECK(aw_obj_vertex_get(obj, AW_ID_NONE, &vertex), AW_BAD_ARGUMENT); - CHECK(aw_obj_vertex_get(NULL, 0, &vertex), AW_BAD_ARGUMENT); + 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); + CHECK(aw_obj_vertex_get(obj, 0, NULL), R_BAD_ARG); + CHECK(aw_obj_vertex_get(NULL, AW_ID_NONE, &vertex), R_BAD_ARG); + CHECK(aw_obj_vertex_get(obj, AW_ID_NONE, &vertex), R_BAD_ARG); + CHECK(aw_obj_vertex_get(NULL, 0, &vertex), R_BAD_ARG); - CHECK(aw_obj_vertex_get(obj, 0, &vertex), AW_OK); + CHECK(aw_obj_vertex_get(obj, 0, &vertex), R_OK); CHECK(f4_eq(vertex.position, f4(v4, 0.f, 2.f, 0.f, 1.f)), 1); CHECK(f3_eq(vertex.texcoord, f3(v4, 0.f, 1.f, 0.f)), 1); - CHECK(aw_obj_vertex_get(obj, 1, &vertex), AW_OK); + CHECK(aw_obj_vertex_get(obj, 1, &vertex), R_OK); CHECK(f4_eq(vertex.position, f4(v4, 0.f, 0.f, 0.f, 1.f)), 1); CHECK(f3_eq(vertex.texcoord, f3(v4, 0.f, 0.f, 0.f)), 1); - CHECK(aw_obj_vertex_get(obj, 2, &vertex), AW_OK); + CHECK(aw_obj_vertex_get(obj, 2, &vertex), R_OK); CHECK(f4_eq(vertex.position, f4(v4, 2.f, 0.f, 0.f, 1.f)), 1); CHECK(f3_eq(vertex.texcoord, f3(v4, 1.f, 0.f, 0.f)), 1); - CHECK(aw_obj_vertex_get(obj, 3, &vertex), AW_OK); + CHECK(aw_obj_vertex_get(obj, 3, &vertex), R_OK); CHECK(f4_eq(vertex.position, f4(v4, 2.f, 2.f, 0.f, 1.f)), 1); CHECK(f3_eq(vertex.texcoord, f3(v4, 1.f, 1.f, 0.f)), 1); } @@ -158,80 +158,80 @@ test_squares(struct aw_obj* obj) NCHECK(file, NULL); fwrite(squares_obj, sizeof(char), strlen(squares_obj), file); fclose(file); - CHECK(aw_obj_load(obj, "test_obj_squares.obj"), AW_OK); + CHECK(aw_obj_load(obj, "test_obj_squares.obj"), R_OK); - CHECK(aw_obj_desc_get(obj, &desc), AW_OK); + CHECK(aw_obj_desc_get(obj, &desc), R_OK); CHECK(desc.faces_count, 2); CHECK(desc.groups_count, 1); CHECK(desc.smooth_groups_count, 1); CHECK(desc.usemtls_count, 0); CHECK(desc.mtllibs_count, 0); - CHECK(aw_obj_face_get(obj, 0, &face), AW_OK); + CHECK(aw_obj_face_get(obj, 0, &face), R_OK); CHECK(face.vertex_id, 0); CHECK(face.vertices_count, 4); CHECK(face.group_id, 0); CHECK(face.smooth_group_id, 0); CHECK(face.mtl_id, AW_ID_NONE); - CHECK(aw_obj_vertex_get(obj, 0, &vertex), AW_OK); + CHECK(aw_obj_vertex_get(obj, 0, &vertex), R_OK); CHECK(f4_eq(vertex.position, f4(v4, 0.f, 2.f, 0.f, 1.f)), 1); CHECK(f3_eq(vertex.normal, f3(v4, 0.f, 0.f, 1.f)), 1); - CHECK(aw_obj_vertex_get(obj, 1, &vertex), AW_OK); + CHECK(aw_obj_vertex_get(obj, 1, &vertex), R_OK); CHECK(f4_eq(vertex.position, f4(v4, 0.f, 0.f, 0.f, 1.f)), 1); CHECK(f3_eq(vertex.normal, f3(v4, 0.f, 0.f, 1.f)), 1); - CHECK(aw_obj_vertex_get(obj, 2, &vertex), AW_OK); + CHECK(aw_obj_vertex_get(obj, 2, &vertex), R_OK); CHECK(f4_eq(vertex.position, f4(v4, 2.f, 0.f, 0.f, 1.f)), 1); CHECK(f3_eq(vertex.normal, f3(v4, 0.276597f, 0.f, 0.960986f)), 1); - CHECK(aw_obj_vertex_get(obj, 3, &vertex), AW_OK); + CHECK(aw_obj_vertex_get(obj, 3, &vertex), R_OK); CHECK(f4_eq(vertex.position, f4(v4, 2.f, 2.f, 0.f, 1.f)), 1); CHECK(f3_eq(vertex.normal, f3(v4, 0.276597f, 0.f, 0.960986f)), 1); - CHECK(aw_obj_face_get(obj, 1, &face), AW_OK); + CHECK(aw_obj_face_get(obj, 1, &face), R_OK); CHECK(face.vertex_id, 4); CHECK(face.vertices_count, 4); CHECK(face.group_id, 0); CHECK(face.smooth_group_id, 0); CHECK(face.mtl_id, AW_ID_NONE); - CHECK(aw_obj_vertex_get(obj, 4, &vertex), AW_OK); + CHECK(aw_obj_vertex_get(obj, 4, &vertex), R_OK); CHECK(f4_eq(vertex.position, f4(v4, 2.f, 2.f, 0.f, 1.f)), 1); CHECK(f3_eq(vertex.normal, f3(v4, 0.276597f, 0.f, 0.960986f)), 1); - CHECK(aw_obj_vertex_get(obj, 5, &vertex), AW_OK); + CHECK(aw_obj_vertex_get(obj, 5, &vertex), R_OK); CHECK(f4_eq(vertex.position, f4(v4, 2.f, 0.f, 0.f, 1.f)), 1); CHECK(f3_eq(vertex.normal, f3(v4, 0.276597f, 0.f, 0.960986f)), 1); - CHECK(aw_obj_vertex_get(obj, 6, &vertex), AW_OK); + CHECK(aw_obj_vertex_get(obj, 6, &vertex), R_OK); CHECK(f4_eq(vertex.position, f4(v4, 4.f, 0.f, -1.255298f, 1.f)), 1); CHECK(f3_eq(vertex.normal, f3(v4, 0.531611f, 0.f, 0.846988f)), 1); - CHECK(aw_obj_vertex_get(obj, 7, &vertex), AW_OK); + CHECK(aw_obj_vertex_get(obj, 7, &vertex), R_OK); CHECK(f4_eq(vertex.position, f4(v4, 4.f, 2.f, -1.255298f, 1.f)), 1); CHECK(f3_eq(vertex.normal, f3(v4, 0.531611f, 0.f, 0.846988f)), 1); - CHECK(aw_obj_group_get(NULL, AW_ID_NONE, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_group_get(obj, AW_ID_NONE, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_group_get(NULL, 0, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_group_get(obj, 0, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_group_get(NULL, AW_ID_NONE, &group), AW_BAD_ARGUMENT); - CHECK(aw_obj_group_get(obj, AW_ID_NONE, &group), AW_BAD_ARGUMENT); - CHECK(aw_obj_group_get(NULL, 0, &group), AW_BAD_ARGUMENT); - CHECK(aw_obj_group_get(obj, 0, &group), AW_OK); + CHECK(aw_obj_group_get(NULL, AW_ID_NONE, NULL), R_BAD_ARG); + CHECK(aw_obj_group_get(obj, AW_ID_NONE, NULL), R_BAD_ARG); + CHECK(aw_obj_group_get(NULL, 0, NULL), R_BAD_ARG); + CHECK(aw_obj_group_get(obj, 0, NULL), R_BAD_ARG); + CHECK(aw_obj_group_get(NULL, AW_ID_NONE, &group), R_BAD_ARG); + CHECK(aw_obj_group_get(obj, AW_ID_NONE, &group), R_BAD_ARG); + CHECK(aw_obj_group_get(NULL, 0, &group), R_BAD_ARG); + CHECK(aw_obj_group_get(obj, 0, &group), R_OK); CHECK(strcmp(group.name, "all"), 0); CHECK(group.face_id, 0); CHECK(group.faces_count, 2); - CHECK(aw_obj_smooth_group_get(NULL, AW_ID_NONE, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_smooth_group_get(obj, AW_ID_NONE, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_smooth_group_get(NULL, 0, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_smooth_group_get(obj, 0, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_smooth_group_get(NULL, AW_ID_NONE, &sgroup), AW_BAD_ARGUMENT); - CHECK(aw_obj_smooth_group_get(obj, AW_ID_NONE, &sgroup), AW_BAD_ARGUMENT); - CHECK(aw_obj_smooth_group_get(NULL, 0, &sgroup), AW_BAD_ARGUMENT); - CHECK(aw_obj_smooth_group_get(obj, 0, &sgroup), AW_OK); + CHECK(aw_obj_smooth_group_get(NULL, AW_ID_NONE, NULL), R_BAD_ARG); + CHECK(aw_obj_smooth_group_get(obj, AW_ID_NONE, NULL), R_BAD_ARG); + CHECK(aw_obj_smooth_group_get(NULL, 0, NULL), R_BAD_ARG); + CHECK(aw_obj_smooth_group_get(obj, 0, NULL), R_BAD_ARG); + CHECK(aw_obj_smooth_group_get(NULL, AW_ID_NONE, &sgroup), R_BAD_ARG); + CHECK(aw_obj_smooth_group_get(obj, AW_ID_NONE, &sgroup), R_BAD_ARG); + CHECK(aw_obj_smooth_group_get(NULL, 0, &sgroup), R_BAD_ARG); + CHECK(aw_obj_smooth_group_get(obj, 0, &sgroup), R_OK); CHECK(sgroup.is_smoothed, 1); CHECK(sgroup.face_id, 0); CHECK(sgroup.faces_count, 2); - CHECK(aw_obj_mtl_get(obj, 0, &mtl), AW_BAD_ARGUMENT); + CHECK(aw_obj_mtl_get(obj, 0, &mtl), R_BAD_ARG); } static void @@ -283,12 +283,12 @@ test_cube(struct aw_obj* obj) fwrite(cube_obj, sizeof(char), strlen(cube_obj), file); CHECK(fseek(file, 0, SEEK_SET), 0); - CHECK(aw_obj_load_stream(NULL, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_load_stream(obj, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_load_stream(NULL, file), AW_BAD_ARGUMENT); - CHECK(aw_obj_load_stream(obj, file), AW_OK); + CHECK(aw_obj_load_stream(NULL, NULL), R_BAD_ARG); + CHECK(aw_obj_load_stream(obj, NULL), R_BAD_ARG); + CHECK(aw_obj_load_stream(NULL, file), R_BAD_ARG); + CHECK(aw_obj_load_stream(obj, file), R_OK); - CHECK(aw_obj_desc_get(obj, &desc), AW_OK); + CHECK(aw_obj_desc_get(obj, &desc), R_OK); CHECK(desc.faces_count, 6); CHECK(desc.groups_count, 6); CHECK(desc.smooth_groups_count, 0); @@ -297,7 +297,7 @@ test_cube(struct aw_obj* obj) FOR_EACH(i, 0, 6) { struct aw_obj_face face; - CHECK(aw_obj_face_get(obj, i, &face), AW_OK); + CHECK(aw_obj_face_get(obj, i, &face), R_OK); CHECK(face.vertex_id, i*4); CHECK(face.vertices_count, 4); CHECK(face.group_id, i); @@ -307,7 +307,7 @@ test_cube(struct aw_obj* obj) FOR_EACH(i, 0, 6) { struct aw_obj_group group; - CHECK(aw_obj_group_get(obj, i, &group), AW_OK); + CHECK(aw_obj_group_get(obj, i, &group), R_OK); CHECK(strcmp(group.name, group_names[i]), 0); CHECK(group.face_id, i); CHECK(group.faces_count, 1); @@ -315,7 +315,7 @@ test_cube(struct aw_obj* obj) FOR_EACH(i, 0, 6) { struct aw_obj_mtl mtl; - CHECK(aw_obj_mtl_get(obj, i, &mtl), AW_OK); + CHECK(aw_obj_mtl_get(obj, i, &mtl), R_OK); CHECK(strcmp(mtl.name, mtl_names[i]), 0); CHECK(mtl.face_id, i); CHECK(mtl.faces_count, 1); @@ -332,25 +332,25 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator, &mem_default_allocator); - CHECK(aw_obj_create(NULL, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_create(&allocator, NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_create(NULL, &obj), AW_OK); + 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_ref_get(NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_ref_get(obj), AW_OK); - CHECK(aw_obj_ref_put(NULL), AW_BAD_ARGUMENT); - CHECK(aw_obj_ref_put(obj), AW_OK); - CHECK(aw_obj_ref_put(obj), AW_OK); + CHECK(aw_obj_ref_get(NULL), R_BAD_ARG); + CHECK(aw_obj_ref_get(obj), R_OK); + CHECK(aw_obj_ref_put(NULL), R_BAD_ARG); + CHECK(aw_obj_ref_put(obj), R_OK); + CHECK(aw_obj_ref_put(obj), R_OK); - CHECK(aw_obj_create(&allocator, &obj), AW_OK); + CHECK(aw_obj_create(&allocator, &obj), R_OK); test_plane(obj); test_squares(obj); test_cube(obj); FOR_EACH(i, 1, argc) - CHECK(aw_obj_load(obj, argv[i]), AW_OK); + CHECK(aw_obj_load(obj, argv[i]), R_OK); - CHECK(aw_obj_ref_put(obj), AW_OK); + CHECK(aw_obj_ref_put(obj), R_OK); if(MEM_ALLOCATED_SIZE(&allocator)) { char dump[512];