From 9fa21837ae7b54b62ea09939473aa987f07eaf90 Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Wed, 9 Jul 2025 19:45:49 -0700 Subject: Rename scene_memory -> memory --- src/memory.h | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/memory.h (limited to 'src/memory.h') diff --git a/src/memory.h b/src/memory.h new file mode 100644 index 0000000..366c6e4 --- /dev/null +++ b/src/memory.h @@ -0,0 +1,39 @@ +/// Memory management of scene objects. +#pragma once + +#include "scene/types.h" + +/// Initialize scene memory. +/// +/// The scene memory guarantees that every object maps to an index different +/// than 0. This way, 0 can be used as a special index to denote "no value". +void scene_mem_init(); + +/// Destroy the scene memory and all allocated objects. +void scene_mem_destroy(); + +#define NAMED_INDEX(name) name##_idx + +#define DECL_MEMORY(name, type) \ + typedef struct type type; \ + /* xyz* mem_alloc_xyz() */ \ + type* mem_alloc_##name(); \ + /* mem_free_xyz(xyz**) */ \ + void mem_free_##name(type**); \ + /* xyz* mem_get_xyz(xyz_idx); */ \ + type* mem_get_##name(NAMED_INDEX(name)); \ + /* xyz_idx mem_get_xyz_index(const xyz*); */ \ + NAMED_INDEX(name) mem_get_##name##_index(const type*); + +DECL_MEMORY(anima, Anima) +DECL_MEMORY(animation, Animation) +DECL_MEMORY(camera, SceneCamera) +DECL_MEMORY(light, Light) +DECL_MEMORY(material, Material) +DECL_MEMORY(mesh, Mesh) +DECL_MEMORY(mesh_link, MeshLink) +DECL_MEMORY(model, Model) +DECL_MEMORY(node, SceneNode) +DECL_MEMORY(object, SceneObject) +DECL_MEMORY(scene, Scene) +DECL_MEMORY(skeleton, Skeleton) -- cgit v1.2.3