tinygi

annotate src/scene.c @ 1:bc64090fe3d1

foo
author John Tsiombikas <nuclear@member.fsf.org>
date Mon, 20 Jul 2015 04:38:53 +0300
parents 16fdca2a1ef5
children
rev   line source
nuclear@0 1 #include <stdlib.h>
nuclear@0 2 #include <string.h>
nuclear@0 3 #include <assert.h>
nuclear@0 4 #include "tgi_impl.h"
nuclear@0 5 #include "object.h"
nuclear@0 6 #include "dynarr.h"
nuclear@0 7
nuclear@0 8 struct tinygi *tgi_init(void)
nuclear@0 9 {
nuclear@0 10 struct tinygi *tgi;
nuclear@0 11
nuclear@0 12 if(!(tgi = malloc(sizeof *tgi))) {
nuclear@0 13 tgi_log("failed to allocate memory\n");
nuclear@0 14 return 0;
nuclear@0 15 }
nuclear@0 16 if(!(tgi->objects = dynarr_alloc(0, sizeof *tgi->objects))) {
nuclear@0 17 tgi_log("failed to allocate objects array\n");
nuclear@0 18 free(tgi);
nuclear@0 19 return 0;
nuclear@0 20 }
nuclear@0 21
nuclear@0 22 return tgi;
nuclear@0 23 }
nuclear@0 24
nuclear@0 25 void tgi_destroy(struct tinygi *tgi)
nuclear@0 26 {
nuclear@0 27 tgi_clear_scene(tgi);
nuclear@0 28 free(tgi);
nuclear@0 29 }
nuclear@0 30
nuclear@0 31 void tgi_clear_scene(struct tinygi *tgi)
nuclear@0 32 {
nuclear@0 33 int i, nobj = dynarr_size(tgi->objects);
nuclear@0 34
nuclear@0 35 for(i=0; i<nobj; i++) {
nuclear@0 36 tgi_destroy_object(tgi->objects[i]);
nuclear@0 37 }
nuclear@0 38 tgi->objects = dynarr_resize(tgi->objects, 0);
nuclear@0 39 assert(tgi->objects);
nuclear@0 40 }
nuclear@0 41
nuclear@0 42 int tgi_load_scene(struct tinygi *tgi, const char *fname)
nuclear@0 43 {
nuclear@0 44 return -1; /* TODO implement later */
nuclear@0 45 }
nuclear@0 46
nuclear@0 47 void tgi_add_object(struct tinygi *tgi, struct tgi_object *o)
nuclear@0 48 {
nuclear@0 49 tgi->objects = dynarr_push(tgi->objects, o);
nuclear@0 50 assert(tgi->objects);
nuclear@0 51 }
nuclear@0 52
nuclear@1 53 int tgi_remove_object(struct tinygi *tgi, struct tgi_object *o)
nuclear@0 54 {
nuclear@0 55 int i, idx = -1, sz = dynarr_size(tgi->objects);
nuclear@0 56
nuclear@0 57 if(!sz) return -1;
nuclear@0 58
nuclear@0 59 for(i=0; i<sz; i++) {
nuclear@0 60 if(tgi->objects[i] == o) {
nuclear@0 61 idx = i;
nuclear@0 62 break;
nuclear@0 63 }
nuclear@0 64 }
nuclear@0 65 if(idx == -1) {
nuclear@0 66 return -1;
nuclear@0 67 }
nuclear@0 68
nuclear@0 69 tgi->objects[idx] = tgi->objects[sz - 1];
nuclear@0 70 tgi->objects = dynarr_pop(tgi->objects);
nuclear@0 71 assert(tgi->objects);
nuclear@0 72 return 0;
nuclear@0 73 }
nuclear@0 74
nuclear@0 75 struct tgi_object *tgi_find_object(struct tinygi *tgi, const char *name)
nuclear@0 76 {
nuclear@0 77 int i, sz = dynarr_size(tgi->objects);
nuclear@0 78
nuclear@0 79 for(i=0; i<sz; i++) {
nuclear@0 80 if(strcmp(tgi->objects[i]->name, name) == 0) {
nuclear@0 81 return tgi->objects[i];
nuclear@0 82 }
nuclear@0 83 }
nuclear@0 84 return 0;
nuclear@0 85 }
nuclear@0 86
nuclear@0 87
nuclear@0 88 struct tgi_object *tgi_get_object(struct tinygi *tgi, int idx)
nuclear@0 89 {
nuclear@0 90 return tgi->objects[idx];
nuclear@0 91 }
nuclear@0 92
nuclear@0 93 int tgi_get_object_count(struct tinygi *tgi)
nuclear@0 94 {
nuclear@0 95 return dynarr_size(tgi->objects);
nuclear@0 96 }
nuclear@0 97
nuclear@0 98