From 440b292c39162284a447b34d3a692143af9fbc87 Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Thu, 30 Oct 2025 17:21:22 -0700 Subject: - Replace SceneCamera with Camera. - Remove backpointer from scene types to node to decouple underlying types from the scene graph. --- src/scene/node.c | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) (limited to 'src/scene/node.c') diff --git a/src/scene/node.c b/src/scene/node.c index 7cc315c..7032324 100644 --- a/src/scene/node.c +++ b/src/scene/node.c @@ -1,15 +1,15 @@ #include "node_impl.h" #include "animation_impl.h" -#include "camera_impl.h" #include "memory.h" -#include "model_impl.h" #include "object_impl.h" #include "render/llr_impl.h" #include "scene_graph.h" #include "gfx_assert.h" +#include + #include #include @@ -19,7 +19,7 @@ static void scene_node_make(SceneNode* node) { node->transform = mat4_id(); } -SceneNode* gfx_make_node() { +SceneNode* gfx_make_node(void) { SceneNode* node = mem_alloc_node(); scene_node_make(node); return node; @@ -30,16 +30,14 @@ SceneNode* gfx_make_anima_node(Anima* anima) { SceneNode* node = gfx_make_node(); node->type = AnimaNode; node->anima = mem_get_anima_index(anima); - anima->parent = mem_get_node_index(node); return node; } -SceneNode* gfx_make_camera_node(SceneCamera* camera) { +SceneNode* gfx_make_camera_node(Camera* camera) { assert(camera); SceneNode* node = gfx_make_node(); node->type = CameraNode; node->camera = mem_get_camera_index(camera); - camera->parent = mem_get_node_index(node); return node; } @@ -48,7 +46,6 @@ SceneNode* gfx_make_light_node(Light* light) { SceneNode* node = gfx_make_node(); node->type = LightNode; node->light = mem_get_light_index(light); - light->parent = mem_get_node_index(node); return node; } @@ -57,7 +54,6 @@ SceneNode* gfx_make_model_node(Model* model) { SceneNode* node = gfx_make_node(); node->type = ModelNode; node->model = mem_get_model_index(model); - model->parent = mem_get_node_index(node); return node; } @@ -66,7 +62,6 @@ SceneNode* gfx_make_object_node(SceneObject* object) { SceneNode* node = gfx_make_node(); node->type = ObjectNode; node->object = mem_get_object_index(object); - object->parent = mem_get_node_index(node); return node; } @@ -74,24 +69,19 @@ SceneNode* gfx_make_object_node(SceneObject* object) { static void free_node_resource(SceneNode* node) { assert(node); - // Set the resource's parent node back to 0 to avoid a recursive call into - // gfx_del_node(). switch (node->type) { case AnimaNode: { - Anima* anima = mem_get_anima(node->anima); - anima->parent.val = 0; + Anima* anima = mem_get_anima(node->anima); gfx_destroy_anima(&anima); return; } case CameraNode: { - SceneCamera* camera = mem_get_camera(node->camera); - camera->parent.val = 0; + Camera* camera = mem_get_camera(node->camera); gfx_destroy_camera(&camera); return; } case LightNode: { - Light* light = mem_get_light(node->light); - light->parent.val = 0; + Light* light = mem_get_light(node->light); gfx_destroy_light(&light); return; } @@ -100,13 +90,13 @@ static void free_node_resource(SceneNode* node) { } case ObjectNode: { SceneObject* object = mem_get_object(node->object); - object->parent.val = 0; gfx_destroy_object(&object); return; } - case LogicalNode: + case LogicalNode: { return; // Logical nodes have no resource. } + } FAIL("unhandled node type"); } @@ -170,11 +160,11 @@ Anima* gfx_get_node_anima_mut(SceneNode* node) { NODE_GET(node, anima, AnimaNode); } -const SceneCamera* gfx_get_node_camera(const SceneNode* node) { +const Camera* gfx_get_node_camera(const SceneNode* node) { NODE_GET(node, camera, CameraNode); } -SceneCamera* gfx_get_node_camera_mut(SceneNode* node) { +Camera* gfx_get_node_camera_mut(SceneNode* node) { NODE_GET(node, camera, CameraNode); } -- cgit v1.2.3