loader_aw

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

commit 4731fce957c755f180bfe70136e66d15211a55e4
parent cf43b267d0bd0104c38c1008e725ffc6d428f99b
Author: vaplv <vaplv@free.fr>
Date:   Sun,  6 Jul 2014 14:25:06 +0200

Begin the implementation and the tests of the Mtl loader

Diffstat:
Mcmake/CMakeLists.txt | 6+++++-
Msrc/aw.h | 4++--
Msrc/aw_mtl.c | 46+++++++++++++++++++++++-----------------------
Asrc/test_aw_mtl.c | 35+++++++++++++++++++++++++++++++++++
4 files changed, 65 insertions(+), 26 deletions(-)

diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt @@ -17,7 +17,7 @@ include(rcmake) ################################################################################ # Define targets ################################################################################ -set(AW_FILES_SRC aw_obj.c) +set(AW_FILES_SRC aw_obj.c aw_mtl.c) set(AW_FILES_INC aw.h) rcmake_prepend_path(AW_FILES_SRC ${AW_SOURCE_DIR}) rcmake_prepend_path(AW_FILES_INC ${AW_SOURCE_DIR}) @@ -43,6 +43,10 @@ add_executable(test_aw_obj ${AW_SOURCE_DIR}/test_aw_obj.c) target_link_libraries(test_aw_obj loader-aw) add_test(test_aw_obj test_aw_obj) +add_executable(test_aw_mtl ${AW_SOURCE_DIR}/test_aw_mtl.c) +target_link_libraries(test_aw_mtl loader-aw) +add_test(test_aw_mtl test_aw_mtl) + ################################################################################ # Install directories ################################################################################ diff --git a/src/aw.h b/src/aw.h @@ -134,12 +134,12 @@ aw_obj_vertex_get AW_API enum aw_result aw_mtl_create (struct mem_allocator* allocator, /* NULL <=> use default allocator */ - struct aw_mtl* mtl); + struct aw_mtl** mtl); AW_API enum aw_result aw_mtl_ref_get (struct aw_mtl* mtl); - + AW_API enum aw_result aw_mtl_ref_put (struct aw_mtl* mtl); diff --git a/src/aw_mtl.c b/src/aw_mtl.c @@ -1,11 +1,11 @@ #define _POSIX_C_SOURCE 200112L /* strtok_r support */ -#include "obj.h" +#include "aw.h" #include <rsys/mem_allocator.h> #include <rsys/ref_count.h> -struct mtl { +struct aw_mtl { ref_T ref; struct mem_allocator* allocator; }; @@ -14,9 +14,9 @@ struct mtl { * Helper functions ******************************************************************************/ static void -obj_mtl_release(ref_T* ref) +aw_mtl_release(ref_T* ref) { - struct obj_mtl* mtl = CONTAINER_OF(ref, struct obj_mtl, ref); + struct aw_mtl* mtl = CONTAINER_OF(ref, struct aw_mtl, ref); ASSERT(ref); MEM_FREE(mtl->allocator, mtl); } @@ -24,26 +24,26 @@ obj_mtl_release(ref_T* ref) /******************************************************************************* * Exported functions ******************************************************************************/ -enum obj_result -obj_mtl_create +enum aw_result +aw_mtl_create (struct mem_allocator* mem_allocator, - struct obj_mtl** mtl_out) + struct aw_mtl** mtl_out) { struct mem_allocator* allocator; - struct obj_mtl* mtl = NULL; - enum obj_result res = OBJ_OK; + struct aw_mtl* mtl = NULL; + enum aw_result res = AW_OK; if(!mtl_out) { - res = OBJ_BAD_ARGUMENT; + res = AW_BAD_ARGUMENT; goto error; } allocator = mem_allocator ? mem_allocator : &mem_default_allocator; - mtl = MEM_CALLOC(allocator, 1, sizeof(struct obj_mtl)); + mtl = MEM_CALLOC(allocator, 1, sizeof(struct aw_mtl)); if(!mtl) { - res = OBJ_MEMORY_ERROR; + res = AW_MEMORY_ERROR; goto error; } - obj->allocator = allocator; + mtl->allocator = allocator; ref_init(&mtl->ref); exit: @@ -52,26 +52,26 @@ exit: return res; error: if(mtl) { - OBJ(mtl_ref_put(mtl)); + AW(mtl_ref_put(mtl)); mtl = NULL; } goto exit; } -enum obj_result -obj_mtl_ref_get(struct obj_mtl* mtl) +enum aw_result +aw_mtl_ref_get(struct aw_mtl* mtl) { if(!mtl) - return OBJ_BAD_ARGUMENT; + return AW_BAD_ARGUMENT; ref_get(&mtl->ref); - return OBJ_OK; + return AW_OK; } -enum obj_result -obj_mtl_ref_put(struct obj_mtl* mtl) +enum aw_result +aw_mtl_ref_put(struct aw_mtl* mtl) { if(!mtl) - return OBJ_BAD_ARGUMENT; - ref_put(&mtl->ref, obj_mtl_release); - return OBJ_OK; + return AW_BAD_ARGUMENT; + ref_put(&mtl->ref, aw_mtl_release); + return AW_OK; } diff --git a/src/test_aw_mtl.c b/src/test_aw_mtl.c @@ -0,0 +1,35 @@ +#include "aw.h" +#include <rsys/mem_allocator.h> + +int +main(int argc, char** argv) +{ + struct mem_allocator allocator; + struct aw_mtl* mtl; + (void)argc, (void)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_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_create(&allocator, &mtl), AW_OK); + CHECK(aw_mtl_ref_put(mtl), AW_OK); + + if(MEM_ALLOCATED_SIZE(&allocator)) { + char dump[512]; + MEM_DUMP(&allocator, dump, sizeof(dump)/sizeof(char)); + fprintf(stderr, "%s\n", dump); + FATAL("Memory leaks\n"); + } + mem_shutdown_proxy_allocator(&allocator); + CHECK(mem_allocated_size(), 0); + return 0; +}