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/scene_memory.h | |
parent | 9a82ce0083437a4f9f58108b2c23b957d2249ad8 (diff) |
Diffstat (limited to 'src/scene/scene_memory.h')
-rw-r--r-- | src/scene/scene_memory.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/scene/scene_memory.h b/src/scene/scene_memory.h new file mode 100644 index 0000000..d175cba --- /dev/null +++ b/src/scene/scene_memory.h | |||
@@ -0,0 +1,39 @@ | |||
1 | /// Memory management of scene objects. | ||
2 | #pragma once | ||
3 | |||
4 | #include "types.h" | ||
5 | |||
6 | /// Initialize scene memory. | ||
7 | /// | ||
8 | /// The scene memory guarantees that every object maps to an index different | ||
9 | /// than 0. This way, 0 can be used as a special index to denote "no value". | ||
10 | void scene_mem_init(); | ||
11 | |||
12 | /// Destroy the scene memory and all allocated objects. | ||
13 | void scene_mem_destroy(); | ||
14 | |||
15 | #define NAMED_INDEX(name) name##_idx | ||
16 | |||
17 | #define DECL_MEMORY(name, type) \ | ||
18 | typedef struct type type; \ | ||
19 | /* xyz* mem_alloc_xyz() */ \ | ||
20 | type* mem_alloc_##name(); \ | ||
21 | /* mem_free_xyz(xyz**) */ \ | ||
22 | void mem_free_##name(type**); \ | ||
23 | /* xyz* mem_get_xyz(xyz_idx); */ \ | ||
24 | type* mem_get_##name(NAMED_INDEX(name)); \ | ||
25 | /* xyz_idx mem_get_xyz_index(const xyz*); */ \ | ||
26 | NAMED_INDEX(name) mem_get_##name##_index(const type*); | ||
27 | |||
28 | DECL_MEMORY(anima, Anima) | ||
29 | DECL_MEMORY(animation, Animation) | ||
30 | DECL_MEMORY(camera, SceneCamera) | ||
31 | DECL_MEMORY(light, Light) | ||
32 | DECL_MEMORY(material, Material) | ||
33 | DECL_MEMORY(mesh, Mesh) | ||
34 | DECL_MEMORY(mesh_link, MeshLink) | ||
35 | DECL_MEMORY(model, Model) | ||
36 | DECL_MEMORY(node, SceneNode) | ||
37 | DECL_MEMORY(object, SceneObject) | ||
38 | DECL_MEMORY(scene, Scene) | ||
39 | DECL_MEMORY(skeleton, Skeleton) | ||