4 Copyright 2008-2012 Michel Pollet <buserror@gmail.com>
6 This file is part of simavr.
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.
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.
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/>.
23 #include "c3/c3object.h"
24 #include "c3/c3context.h"
25 #include "c3/c3driver_geometry.h"
26 #include "c3/c3driver_context.h"
31 const struct c3driver_geometry_t *d)
34 * If we're still attached to an object, detach
37 for (int oi = 0; oi < g->object->geometry.count; oi++)
38 if (g->object->geometry.e[oi] == g) {
39 c3geometry_array_delete(&g->object->geometry, oi, 1);
40 c3object_set_dirty(g->object, true);
46 c3vertex_array_free(&g->vertice);
47 c3vertex_array_free(&g->projected);
48 c3tex_array_free(&g->textures);
49 c3colorf_array_free(&g->colorf);
51 // C3_DRIVER_INHERITED(g, d, dispose);
57 const struct c3driver_geometry_t *d)
60 if (g->object && g->object->context)
61 C3_DRIVER(g->object->context, geometry_prepare, g);
63 // C3_DRIVER_INHERITED(g, d, prepare);
69 const struct c3driver_geometry_t *d)
71 if (g->object && g->object->context)
72 C3_DRIVER(g->object->context, geometry_draw, g);
73 // C3_DRIVER_INHERITED(g, d, draw);
76 const c3driver_geometry_t c3geometry_driver = {
77 .dispose = _c3geometry_dispose,
78 .prepare = _c3geometry_prepare,
79 .draw = _c3geometry_draw,
84 c3geometry_type_t type,
85 c3object_p o /* = NULL */)
87 c3geometry_p res = malloc(sizeof(c3geometry_t));
88 return c3geometry_init(res, type, o);
94 c3geometry_type_t type,
95 struct c3object_t * o /* = NULL */)
97 memset(g, 0, sizeof(*g));
98 static const c3driver_geometry_t * list[] = {
99 &c3geometry_driver, NULL,
105 c3object_add_geometry(o, g);
110 c3geometry_get_custom(
114 return (c3driver_geometry_p)g->driver[0];
116 for (int di = 0; g->driver[di]; di++)
118 c3driver_geometry_p * newd = malloc(sizeof(c3driver_geometry_p) * (cnt + 2));
119 memcpy(&newd[1], g->driver, (cnt + 1) * sizeof(c3driver_geometry_p));
120 newd[0] = malloc(sizeof(c3driver_geometry_t));
121 memset(newd[0], 0, sizeof(c3driver_geometry_t));
123 g->driver = (typeof(g->driver))newd;
131 C3_DRIVER(g, dispose);
140 C3_DRIVER(g, prepare);