diff options
author | 3gg <3gg@shellblade.net> | 2025-06-27 10:18:39 -0700 |
---|---|---|
committer | 3gg <3gg@shellblade.net> | 2025-06-27 10:18:39 -0700 |
commit | bd57f345ed9dbed1d81683e48199626de2ea9044 (patch) | |
tree | 4221f2f2a7ad2244d2e93052bd68187ec91b8ea9 /src/scene/model.c | |
parent | 9a82ce0083437a4f9f58108b2c23b957d2249ad8 (diff) |
Diffstat (limited to 'src/scene/model.c')
-rw-r--r-- | src/scene/model.c | 45 |
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 | |||
9 | Model* 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 | |||
17 | void 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 | |||
27 | Anima* 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 | |||
38 | const SceneNode* gfx_get_model_root(const Model* model) { | ||
39 | assert(model); | ||
40 | return mem_get_node(model->root); | ||
41 | } | ||
42 | |||
43 | SceneNode* gfx_get_model_root_mut(Model* model) { | ||
44 | return (SceneNode*)gfx_get_model_root(model); | ||
45 | } | ||