Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorDalai Felinto <dfelinto@gmail.com>2016-12-05 22:50:01 +0300
committerDalai Felinto <dfelinto@gmail.com>2016-12-05 23:52:38 +0300
commit3acb83c6f4434f908f05054241ab181845d6673a (patch)
tree8d1246de4d1769b466d23156083b7928a0c0201d /source
parentd0ef44218ea076a4b247d7334fa1b17cf7761fe8 (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.c2
-rw-r--r--source/blender/blenkernel/intern/scene.c8
-rw-r--r--source/blender/blenloader/intern/readfile.c11
-rw-r--r--source/blender/blenloader/intern/versioning_280.c10
-rw-r--r--source/blender/blenloader/intern/writefile.c5
-rw-r--r--source/blender/makesdna/DNA_scene_types.h2
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 ********************* */