| 41 #include <assert.h> |
41 #include <assert.h> |
| 42 |
42 |
| 43 void asc_scene_init(AscScene *scene, const char *name, AscCamera *camera) { |
43 void asc_scene_init(AscScene *scene, const char *name, AscCamera *camera) { |
| 44 assert(scene->root == NULL); |
44 assert(scene->root == NULL); |
| 45 scene->camera = camera; |
45 scene->camera = camera; |
| |
46 scene->nodes_dict = asc_scene_node_dict_create(); |
| 46 scene->root = asc_scene_node_empty(); |
47 scene->root = asc_scene_node_empty(); |
| |
48 scene->root->dict = scene->nodes_dict; |
| 47 for (unsigned i = 0 ; i < ASC_RENDER_GROUP_COUNT ; i++) { |
49 for (unsigned i = 0 ; i < ASC_RENDER_GROUP_COUNT ; i++) { |
| 48 scene->internal.render_groups[i] = cxArrayListCreate(NULL, CX_STORE_POINTERS, 32); |
50 scene->internal.render_groups[i] = cxArrayListCreate(NULL, CX_STORE_POINTERS, 32); |
| 49 } |
51 } |
| 50 if (name == NULL) { |
52 if (name == NULL) { |
| 51 scene->name = asc_util_gen_name("scene"); |
53 scene->name = asc_util_gen_name("scene"); |
| 59 if (scene == NULL || scene->root == NULL) return; |
61 if (scene == NULL || scene->root == NULL) return; |
| 60 for (unsigned i = 0 ; i < ASC_RENDER_GROUP_COUNT ; i++) { |
62 for (unsigned i = 0 ; i < ASC_RENDER_GROUP_COUNT ; i++) { |
| 61 cxListFree(scene->internal.render_groups[i]); |
63 cxListFree(scene->internal.render_groups[i]); |
| 62 scene->internal.render_groups[i] = NULL; |
64 scene->internal.render_groups[i] = NULL; |
| 63 } |
65 } |
| |
66 asc_scene_node_dict_free(scene->nodes_dict); |
| 64 asc_scene_node_free(scene->root); |
67 asc_scene_node_free(scene->root); |
| 65 scene->root = NULL; |
68 scene->root = NULL; |
| 66 asc_dprintf("Destroyed scene %"CX_PRIstr, CX_SFMT(scene->name)); |
69 asc_dprintf("Destroyed scene %"CX_PRIstr, CX_SFMT(scene->name)); |
| 67 cx_strfree(&scene->name); |
70 cx_strfree(&scene->name); |
| 68 } |
71 } |