44 offsetof(AscSceneNode, next) |
44 offsetof(AscSceneNode, next) |
45 ); |
45 ); |
46 } |
46 } |
47 |
47 |
48 AscSceneNode *asc_scene_node_empty(void) { |
48 AscSceneNode *asc_scene_node_empty(void) { |
49 AscSceneNode *node = calloc(1, sizeof(AscSceneNode)); |
49 AscSceneNode *node = cxZallocDefault(sizeof(AscSceneNode)); |
50 node->render_group = ASC_RENDER_GROUP_NONE; |
50 node->render_group = ASC_RENDER_GROUP_NONE; |
51 node->scale = asc_vec3f_one; |
51 node->scale = asc_vec3f_one; |
52 asc_transform_identity(node->transform); |
52 asc_transform_identity(node->transform); |
53 asc_transform_identity(node->world_transform); |
53 asc_transform_identity(node->world_transform); |
54 return node; |
54 return node; |
74 // free the entire subtree |
74 // free the entire subtree |
75 CxTreeIterator iter = asc_scene_node_iterator(node, true); |
75 CxTreeIterator iter = asc_scene_node_iterator(node, true); |
76 cx_foreach(AscSceneNode*, child, iter) { |
76 cx_foreach(AscSceneNode*, child, iter) { |
77 if (!iter.exiting) continue; |
77 if (!iter.exiting) continue; |
78 asc_scene_node_destroy(child); |
78 asc_scene_node_destroy(child); |
79 free(child); |
79 cxFreeDefault(child); |
80 } |
80 } |
81 } |
81 } |
82 |
82 |
83 void asc_scene_node_name(AscSceneNode *node, const char *name) { |
83 void asc_scene_node_name(AscSceneNode *node, const char *name) { |
84 free(node->name.ptr); |
84 cx_strfree(&node->name); |
85 if (name == NULL) { |
85 if (name == NULL) { |
86 node->name.ptr = NULL; |
86 node->name.ptr = NULL; |
87 node->name.length = 0; |
87 node->name.length = 0; |
88 } else { |
88 } else { |
89 node->name.ptr = strdup(name); |
89 node->name.ptr = strdup(name); |