fix that empty nodes fail to recalculate world transforms in the scene graph

Thu, 17 Jul 2025 20:13:25 +0200

author
Mike Becker <universe@uap-core.de>
date
Thu, 17 Jul 2025 20:13:25 +0200
changeset 211
f181205da2c9
parent 210
3021616e5772
child 212
90bbacb97cb6

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;

mercurial