aboutsummaryrefslogtreecommitdiff
path: root/src/scene/model.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/scene/model.c')
-rw-r--r--src/scene/model.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/scene/model.c b/src/scene/model.c
new file mode 100644
index 0000000..cc41a9a
--- /dev/null
+++ b/src/scene/model.c
@@ -0,0 +1,45 @@
1#include "model_impl.h"
2
3#include <gfx/scene/node.h>
4
5#include "scene_memory.h"
6
7#include <assert.h>
8
9Model* gfx_make_model(const SceneNode* root) {
10 assert(root);
11
12 Model* model = mem_alloc_model();
13 model->root = mem_get_node_index(root);
14 return model;
15}
16
17void gfx_del_model(Model** model) {
18 assert(model);
19
20 if (*model) {
21 SceneNode* root = mem_get_node((*model)->root);
22 gfx_destroy_node(&root);
23 *model = 0;
24 }
25}
26
27Anima* gfx_get_model_anima(Model* model) {
28 assert(model);
29
30 SceneNode* root = mem_get_node(model->root);
31 if (gfx_get_node_type(root) == AnimaNode) {
32 return gfx_get_node_anima_mut(root);
33 } else {
34 return 0;
35 }
36}
37
38const SceneNode* gfx_get_model_root(const Model* model) {
39 assert(model);
40 return mem_get_node(model->root);
41}
42
43SceneNode* gfx_get_model_root_mut(Model* model) {
44 return (SceneNode*)gfx_get_model_root(model);
45}