176 render_iter = cxListIterator(render_group[ASC_RENDER_GROUP_SPRITE_BLEND]); |
176 render_iter = cxListIterator(render_group[ASC_RENDER_GROUP_SPRITE_BLEND]); |
177 cx_foreach(AscSprite const *, node, render_iter) { |
177 cx_foreach(AscSprite const *, node, render_iter) { |
178 asc_sprite_draw(node); |
178 asc_sprite_draw(node); |
179 } |
179 } |
180 |
180 |
181 // destroy render groups |
181 // deallocate render groups |
182 cx_for_n(i, ASC_RENDER_GROUP_COUNT) { |
182 cx_for_n(i, ASC_RENDER_GROUP_COUNT) { |
183 cxListDestroy(render_group[i]); |
183 cxListFree(render_group[i]); |
184 } |
184 } |
185 } |
185 } |
186 |
186 |
187 AscSceneNode *asc_scene_node_empty(void) { |
187 AscSceneNode *asc_scene_node_empty(void) { |
188 AscSceneNode *node = calloc(1, sizeof(AscSceneNode)); |
188 AscSceneNode *node = calloc(1, sizeof(AscSceneNode)); |
202 // free the entire subtree |
202 // free the entire subtree |
203 CxTreeIterator iter = asc_scene_node_iterator(node, true); |
203 CxTreeIterator iter = asc_scene_node_iterator(node, true); |
204 cx_foreach(AscSceneNode*, child, iter) { |
204 cx_foreach(AscSceneNode*, child, iter) { |
205 if (!iter.exiting) continue; |
205 if (!iter.exiting) continue; |
206 if (child->behaviors != NULL) { |
206 if (child->behaviors != NULL) { |
207 cxListDestroy(child->behaviors); |
207 cxListFree(child->behaviors); |
208 } |
208 } |
209 if (child->free_func != NULL) { |
209 if (child->free_func != NULL) { |
210 child->free_func(child); |
210 child->free_func(child); |
211 } else { |
211 } else { |
212 free(child); |
212 free(child); |