tinygi

view src/tinygi.c @ 2:72752a1b3dbe

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