nuclear@0: #include nuclear@0: #include nuclear@0: #include nuclear@0: #include "tgi_impl.h" nuclear@0: #include "object.h" nuclear@0: #include "dynarr.h" nuclear@0: nuclear@0: struct tinygi *tgi_init(void) nuclear@0: { nuclear@0: struct tinygi *tgi; nuclear@0: nuclear@0: if(!(tgi = malloc(sizeof *tgi))) { nuclear@0: tgi_log("failed to allocate memory\n"); nuclear@0: return 0; nuclear@0: } nuclear@0: if(!(tgi->objects = dynarr_alloc(0, sizeof *tgi->objects))) { nuclear@0: tgi_log("failed to allocate objects array\n"); nuclear@0: free(tgi); nuclear@0: return 0; nuclear@0: } nuclear@0: nuclear@0: return tgi; nuclear@0: } nuclear@0: nuclear@0: void tgi_destroy(struct tinygi *tgi) nuclear@0: { nuclear@0: tgi_clear_scene(tgi); nuclear@0: free(tgi); nuclear@0: } nuclear@0: nuclear@0: void tgi_clear_scene(struct tinygi *tgi) nuclear@0: { nuclear@0: int i, nobj = dynarr_size(tgi->objects); nuclear@0: nuclear@0: for(i=0; iobjects[i]); nuclear@0: } nuclear@0: tgi->objects = dynarr_resize(tgi->objects, 0); nuclear@0: assert(tgi->objects); nuclear@0: } nuclear@0: nuclear@0: int tgi_load_scene(struct tinygi *tgi, const char *fname) nuclear@0: { nuclear@0: return -1; /* TODO implement later */ nuclear@0: } nuclear@0: nuclear@0: void tgi_add_object(struct tinygi *tgi, struct tgi_object *o) nuclear@0: { nuclear@0: tgi->objects = dynarr_push(tgi->objects, o); nuclear@0: assert(tgi->objects); nuclear@0: } nuclear@0: nuclear@1: int tgi_remove_object(struct tinygi *tgi, struct tgi_object *o) nuclear@0: { nuclear@0: int i, idx = -1, sz = dynarr_size(tgi->objects); nuclear@0: nuclear@0: if(!sz) return -1; nuclear@0: nuclear@0: for(i=0; iobjects[i] == o) { nuclear@0: idx = i; nuclear@0: break; nuclear@0: } nuclear@0: } nuclear@0: if(idx == -1) { nuclear@0: return -1; nuclear@0: } nuclear@0: nuclear@0: tgi->objects[idx] = tgi->objects[sz - 1]; nuclear@0: tgi->objects = dynarr_pop(tgi->objects); nuclear@0: assert(tgi->objects); nuclear@0: return 0; nuclear@0: } nuclear@0: nuclear@0: struct tgi_object *tgi_find_object(struct tinygi *tgi, const char *name) nuclear@0: { nuclear@0: int i, sz = dynarr_size(tgi->objects); nuclear@0: nuclear@0: for(i=0; iobjects[i]->name, name) == 0) { nuclear@0: return tgi->objects[i]; nuclear@0: } nuclear@0: } nuclear@0: return 0; nuclear@0: } nuclear@0: nuclear@0: nuclear@0: struct tgi_object *tgi_get_object(struct tinygi *tgi, int idx) nuclear@0: { nuclear@0: return tgi->objects[idx]; nuclear@0: } nuclear@0: nuclear@0: int tgi_get_object_count(struct tinygi *tgi) nuclear@0: { nuclear@0: return dynarr_size(tgi->objects); nuclear@0: } nuclear@0: nuclear@0: