Thu, 17 Jul 2025 20:13:25 +0200
fix that empty nodes fail to recalculate world transforms in the scene graph
src/scene.c | file | annotate | diff | comparison | revisions | |
src/scene_node.c | file | annotate | diff | comparison | revisions |
--- a/src/scene.c Thu Jul 17 19:50:34 2025 +0200 +++ b/src/scene.c Thu Jul 17 20:13:25 2025 +0200 @@ -157,8 +157,9 @@ if (asc_test_flag(node->flags, ASC_SCENE_NODE_UPDATE_GRAPHICS)) { asc_set_flag(node->flags, ASC_SCENE_NODE_GRAPHICS_UPDATED); asc_clear_flag(node->flags, ASC_SCENE_NODE_UPDATE_GRAPHICS); - assert(node->update_func != NULL); - node->update_func(node); + if (node->update_func != NULL) { + node->update_func(node); + } } // check if transform needs an update if (asc_test_flag(node->flags, ASC_SCENE_NODE_UPDATE_TRANSFORM)) {
--- a/src/scene_node.c Thu Jul 17 19:50:34 2025 +0200 +++ b/src/scene_node.c Thu Jul 17 20:13:25 2025 +0200 @@ -48,9 +48,7 @@ AscSceneNode *asc_scene_node_empty(void) { AscSceneNode *node = cxZallocDefault(sizeof(AscSceneNode)); - node->render_group = ASC_RENDER_GROUP_NONE; - asc_transform_identity(node->transform); - asc_transform_identity(node->world_transform); + asc_scene_node_init(node, .render_group = ASC_RENDER_GROUP_NONE); return node; } @@ -88,9 +86,11 @@ asc_scene_node_name(node, args.name); } node->render_group = args.render_group; - assert(args.update_func != NULL); - assert(args.draw_func != NULL); - assert(args.destroy_func != NULL); + if (args.render_group != ASC_RENDER_GROUP_NONE) { + assert(args.update_func != NULL); + assert(args.draw_func != NULL); + assert(args.destroy_func != NULL); + } node->update_func = args.update_func; node->destroy_func = args.destroy_func; node->draw_func = args.draw_func;