reprap: Added c3, a small scene graph lib
[simavr] / examples / board_reprap / src / c3 / c3geometry.c
1 /*
2         c3geometry.c
3
4         Copyright 2008-2012 Michel Pollet <buserror@gmail.com>
5
6         This file is part of simavr.
7
8         simavr is free software: you can redistribute it and/or modify
9         it under the terms of the GNU General Public License as published by
10         the Free Software Foundation, either version 3 of the License, or
11         (at your option) any later version.
12
13         simavr is distributed in the hope that it will be useful,
14         but WITHOUT ANY WARRANTY; without even the implied warranty of
15         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16         GNU General Public License for more details.
17
18         You should have received a copy of the GNU General Public License
19         along with simavr.  If not, see <http://www.gnu.org/licenses/>.
20  */
21
22
23 #include "c3/c3object.h"
24
25
26 c3geometry_p
27 c3geometry_new(
28                 int type,
29                 c3object_p o /* = NULL */)
30 {
31         c3geometry_p res = malloc(sizeof(c3geometry_t));
32         memset(res, 0, sizeof(*res));
33         res->type = type;
34         res->dirty = 1;
35         c3object_add_geometry(o, res);
36         return res;
37 }
38
39 void
40 c3geometry_dispose(
41                 c3geometry_p g)
42 {
43         /*
44          * If we're still attached to an object, detach
45          */
46         if (g->object) {
47                 for (int oi = 0; oi < g->object->geometry.count; oi++)
48                         if (g->object->geometry.e[oi] == g) {
49                                 c3geometry_array_delete(&g->object->geometry, oi, 1);
50                                 c3object_set_dirty(g->object, true);
51                                 break;
52                         }
53                 g->object = NULL;
54         }
55         str_free(g->name);
56         c3vertex_array_free(&g->vertice);
57         c3vertex_array_free(&g->projected);
58         c3tex_array_free(&g->textures);
59         c3colorf_array_free(&g->colorf);
60         free(g);
61 }