src/scene.c

changeset 303
21ff357e773c
parent 292
25931abee09f
equal deleted inserted replaced
302:066481b8b3a5 303:21ff357e773c
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 }

mercurial