diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2016-12-05 22:50:01 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2016-12-05 23:52:38 +0300 |
commit | 3acb83c6f4434f908f05054241ab181845d6673a (patch) | |
tree | 8d1246de4d1769b466d23156083b7928a0c0201d /source | |
parent | d0ef44218ea076a4b247d7334fa1b17cf7761fe8 (diff) |
Use pointer for master collection
This allows this pointer to be used, otherwise the pointer is not written
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/collection.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 8 | ||||
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 11 | ||||
-rw-r--r-- | source/blender/blenloader/intern/versioning_280.c | 10 | ||||
-rw-r--r-- | source/blender/blenloader/intern/writefile.c | 5 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_scene_types.h | 2 |
6 files changed, 29 insertions, 9 deletions
diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c index f53d8be0fd5..0ad82af62fb 100644 --- a/source/blender/blenkernel/intern/collection.c +++ b/source/blender/blenkernel/intern/collection.c @@ -156,7 +156,7 @@ bool BKE_collection_remove(Scene *scene, SceneCollection *sc) */ SceneCollection *BKE_collection_master(Scene *scene) { - return &scene->collection; + return scene->collection; } /* diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 125d6962332..ed0e543ee48 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -462,6 +462,10 @@ void BKE_scene_free(Scene *sce) BKE_previewimg_free(&sce->preview); curvemapping_free_data(&sce->r.mblur_shutter_curve); + + /* Master Collection */ + MEM_freeN(sce->collection); + sce->collection = NULL; } void BKE_scene_init(Scene *sce) @@ -792,6 +796,10 @@ void BKE_scene_init(Scene *sce) sce->toolsettings->gpencil_v2d_align = GP_PROJECT_VIEWSPACE; sce->toolsettings->gpencil_seq_align = GP_PROJECT_VIEWSPACE; sce->toolsettings->gpencil_ima_align = GP_PROJECT_VIEWSPACE; + + /* Master Collection */ + sce->collection = MEM_callocN(sizeof(SceneCollection), "Master Collection"); + BLI_strncpy(sce->collection->name, "Master Collection", sizeof(sce->collection->name)); } Scene *BKE_scene_add(Main *bmain, const char *name) diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 73d49b45f1a..ea5687f2037 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -5396,7 +5396,7 @@ static void lib_link_scene(FileData *fd, Main *main) /* Motion Tracking */ sce->clip = newlibadr_us(fd, sce->id.lib, sce->clip); - lib_link_scene_collection(fd, sce->id.lib, &sce->collection); + lib_link_scene_collection(fd, sce->id.lib, sce->collection); for (sl = sce->render_layers.first; sl; sl = sl->next) { for (ObjectBase *ob_base = sl->object_bases.first; ob_base; ob_base = ob_base->next) { @@ -5509,6 +5509,11 @@ static void direct_link_view_settings(FileData *fd, ColorManagedViewSettings *vi static void direct_link_scene_collection(FileData *fd, SceneCollection *sc) { + /* this runs before the very first doversion */ + if (sc == NULL) { + return; + } + link_list(fd, &sc->objects); for (LinkData *link = sc->objects.first; link; link = link->next) { link->data = newdataadr(fd, link->data); @@ -5781,7 +5786,7 @@ static void direct_link_scene(FileData *fd, Scene *sce) direct_link_curvemapping(fd, &sce->r.mblur_shutter_curve); - direct_link_scene_collection(fd, &sce->collection); + direct_link_scene_collection(fd, sce->collection); link_list(fd, &sce->render_layers); for (sl = sce->render_layers.first; sl; sl = sl->next) { @@ -9137,7 +9142,7 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce) expand_doit(fd, mainvar, sce->clip); - expand_layer_collection(fd, mainvar, &sce->collection); + expand_layer_collection(fd, mainvar, sce->collection); } static void expand_camera(FileData *fd, Main *mainvar, Camera *ca) diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c index db1619e1e07..0368df6aa99 100644 --- a/source/blender/blenloader/intern/versioning_280.c +++ b/source/blender/blenloader/intern/versioning_280.c @@ -51,7 +51,6 @@ void blo_do_versions_280_after_linking(FileData *fd, Library *UNUSED(lib), Main if (!MAIN_VERSION_ATLEAST(main, 280, 0)) { if (!DNA_struct_elem_find(fd->filesdna, "Scene", "ListBase", "render_layers")) { for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { - SceneCollection *sc_master = BKE_collection_master(scene); BLI_strncpy(sc_master->name, "Master Collection", sizeof(sc_master->name)); @@ -133,8 +132,15 @@ void blo_do_versions_280_after_linking(FileData *fd, Library *UNUSED(lib), Main } } -void blo_do_versions_280(FileData *UNUSED(fd), Library *UNUSED(lib), Main *main) +void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main) { if (!MAIN_VERSION_ATLEAST(main, 280, 0)) { + if (!DNA_struct_elem_find(fd->filesdna, "Scene", "SceneCollection", "collection")) { + for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { + /* Master Collection */ + scene->collection = MEM_callocN(sizeof(SceneCollection), "Master Collection"); + BLI_strncpy(scene->collection->name, "Master Collection", sizeof(scene->collection->name)); + } + } } } diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index bd4ea5e990a..fcbcf3d0e4d 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -2404,11 +2404,12 @@ static void write_paint(WriteData *wd, Paint *p) static void write_scene_collection(WriteData *wd, SceneCollection *sc) { + writestruct(wd, DATA, SceneCollection, 1, sc); + writelist(wd, DATA, LinkData, &sc->objects); writelist(wd, DATA, LinkData, &sc->filter_objects); for (SceneCollection *nsc = sc->scene_collections.first; nsc; nsc = nsc->next) { - writestruct(wd, DATA, SceneCollection, 1, nsc); write_scene_collection(wd, nsc); } } @@ -2641,7 +2642,7 @@ static void write_scenes(WriteData *wd, ListBase *scebase) write_previews(wd, sce->preview); write_curvemapping_curves(wd, &sce->r.mblur_shutter_curve); - write_scene_collection(wd, &sce->collection); + write_scene_collection(wd, sce->collection); for (sl = sce->render_layers.first; sl; sl = sl->next) { writestruct(wd, DATA, SceneLayer, 1, sl); diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index c3283d6c7aa..7b78aa9e062 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -1632,7 +1632,7 @@ typedef struct Scene { struct PreviewImage *preview; ListBase render_layers; - struct SceneCollection collection; + struct SceneCollection *collection; } Scene; /* **************** RENDERDATA ********************* */ |