aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/scene/scene_graph.h42
-rw-r--r--src/scene/scene_memory.c9
2 files changed, 29 insertions, 22 deletions
diff --git a/src/scene/scene_graph.h b/src/scene/scene_graph.h
index a26f828..0b1f7d0 100644
--- a/src/scene/scene_graph.h
+++ b/src/scene/scene_graph.h
@@ -6,35 +6,41 @@
6// NOTE: SceneMemory guarantees that index 0 can be regarded as an invalid 6// NOTE: SceneMemory guarantees that index 0 can be regarded as an invalid
7// index. 7// index.
8 8
9#define MEM_GET(INDEX) \ 9#define MEM_GET(INDEX) \
10 _Generic((INDEX), camera_idx \ 10 _Generic( \
11 : mem_get_camera, material_idx \ 11 (INDEX), \
12 : mem_get_material, mesh_idx \ 12 camera_idx: mem_get_camera, \
13 : mem_get_mesh, mesh_link_idx \ 13 material_idx: mem_get_material, \
14 : mem_get_mesh_link, node_idx \ 14 mesh_idx: mem_get_mesh, \
15 : mem_get_node, object_idx \ 15 mesh_link_idx: mem_get_mesh_link, \
16 : mem_get_object, scene_idx \ 16 node_idx: mem_get_node, \
17 : mem_get_scene)(INDEX) 17 object_idx: mem_get_object, \
18 scene_idx: mem_get_scene)(INDEX)
18 19
19#define MEM_GET_INDEX(ITEM) \ 20#define MEM_GET_INDEX(ITEM) \
20 _Generic((ITEM), SceneCamera * \ 21 _Generic( \
21 : mem_get_camera_index, Material * \ 22 (ITEM), \
22 : mem_get_material_index, Mesh * \ 23 SceneCamera *: mem_get_camera_index, \
23 : mem_get_mesh_index, MeshLink * \ 24 Material *: mem_get_material_index, \
24 : mem_get_mesh_link_index, SceneNode * \ 25 Mesh *: mem_get_mesh_index, \
25 : mem_get_node_index, SceneObject * \ 26 MeshLink *: mem_get_mesh_link_index, \
26 : mem_get_object_index, Scene * \ 27 SceneNode *: mem_get_node_index, \
27 : mem_get_scene_index)(ITEM) 28 SceneObject *: mem_get_object_index, \
29 Scene *: mem_get_scene_index)(ITEM)
28 30
29/// Assert the list node invariant. 31/// Assert the list node invariant.
30/// 32///
31/// - A node does not point to itself. 33/// - A node does not point to itself.
34#if NDEBUG
35#define ASSERT_LIST_NODE_INVARIANT(ITEM)
36#else
32#define ASSERT_LIST_NODE_INVARIANT(ITEM) \ 37#define ASSERT_LIST_NODE_INVARIANT(ITEM) \
33 { \ 38 { \
34 const gfx_idx item_idx = MEM_GET_INDEX(ITEM).val; \ 39 const gfx_idx item_idx = MEM_GET_INDEX(ITEM).val; \
35 assert((ITEM)->prev.val != item_idx); \ 40 assert((ITEM)->prev.val != item_idx); \
36 assert((ITEM)->next.val != item_idx); \ 41 assert((ITEM)->next.val != item_idx); \
37 } 42 }
43#endif
38 44
39/// Assert the tree node invariant. 45/// Assert the tree node invariant.
40/// 46///
diff --git a/src/scene/scene_memory.c b/src/scene/scene_memory.c
index 4d7020a..d1d81a9 100644
--- a/src/scene/scene_memory.c
+++ b/src/scene/scene_memory.c
@@ -48,10 +48,11 @@ typedef struct SceneMemory {
48 48
49static SceneMemory mem; 49static SceneMemory mem;
50 50
51#define ALLOC_DUMMY(POOL) \ 51#define ALLOC_DUMMY(POOL) \
52 { \ 52 { \
53 const void* object = mempool_alloc(POOL); \ 53 const void* object = mempool_alloc(POOL); \
54 assert(mempool_get_block_index(POOL, object) == 0); \ 54 (void)object; /* Silence warning in release builds. */ \
55 assert(mempool_get_block_index(POOL, object) == 0); \
55 } 56 }
56 57
57#define PLURAL(name) name##s 58#define PLURAL(name) name##s