[Bf-blender-cvs] [3acb83c] render-layers: Use pointer for master collection

Dalai Felinto noreply at git.blender.org
Mon Dec 5 22:03:51 CET 2016


Commit: 3acb83c6f4434f908f05054241ab181845d6673a
Author: Dalai Felinto
Date:   Mon Dec 5 20:50:01 2016 +0100
Branches: render-layers
https://developer.blender.org/rB3acb83c6f4434f908f05054241ab181845d6673a

Use pointer for master collection

This allows this pointer to be used, otherwise the pointer is not written

===================================================================

M	source/blender/blenkernel/intern/collection.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/makesdna/DNA_scene_types.h

===================================================================

diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c
index f53d8be..0ad82af 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 125d696..ed0e543 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 73d49b4..ea5687f 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 db1619e..0368df6 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 bd4ea5e..fcbcf3d 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 c3283d6..7b78aa9 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 ********************* */




More information about the Bf-blender-cvs mailing list