[Bf-blender-cvs] [88bb27adc6] temp-depsgraph-layers: Adding missing DAG_relations_tag_update

Dalai Felinto noreply at git.blender.org
Mon Mar 20 19:48:15 CET 2017


Commit: 88bb27adc66c5ca2d229fd4ffb888577d2327219
Author: Dalai Felinto
Date:   Fri Mar 17 18:32:01 2017 +0100
Branches: temp-depsgraph-layers
https://developer.blender.org/rB88bb27adc66c5ca2d229fd4ffb888577d2327219

Adding missing DAG_relations_tag_update

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

M	source/blender/editors/render/render_shading.c
M	source/blender/editors/space_outliner/outliner_collections.c
M	source/blender/editors/space_outliner/outliner_tools.c
M	source/blender/makesrna/intern/rna_scene.c
M	tests/python/render_layer/test_evaluation_visibility_b.py

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

diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c
index 490182b17e..c2aaba4dfd 100644
--- a/source/blender/editors/render/render_shading.c
+++ b/source/blender/editors/render/render_shading.c
@@ -631,6 +631,7 @@ static int render_layer_add_exec(bContext *C, wmOperator *UNUSED(op))
 	scene->active_layer = BLI_listbase_count(&scene->render_layers) - 1;
 
 	DAG_id_tag_update(&scene->id, 0);
+	DAG_relations_tag_update(CTX_data_main(C));
 	WM_event_add_notifier(C, NC_SCENE | ND_LAYER, scene);
 	
 	return OPERATOR_FINISHED;
diff --git a/source/blender/editors/space_outliner/outliner_collections.c b/source/blender/editors/space_outliner/outliner_collections.c
index c5cfd47486..e9c49ffdb1 100644
--- a/source/blender/editors/space_outliner/outliner_collections.c
+++ b/source/blender/editors/space_outliner/outliner_collections.c
@@ -26,6 +26,7 @@
 
 #include "BKE_context.h"
 #include "BKE_collection.h"
+#include "BKE_depsgraph.h"
 #include "BKE_layer.h"
 #include "BKE_report.h"
 
@@ -120,6 +121,7 @@ static int collection_link_exec(bContext *C, wmOperator *op)
 
 	BKE_collection_link(sl, sc);
 
+	DAG_relations_tag_update(CTX_data_main(C));
 	WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
 	return OPERATOR_FINISHED;
 }
@@ -217,6 +219,7 @@ static int collection_unlink_exec(bContext *C, wmOperator *op)
 	SceneLayer *sl = CTX_data_scene_layer(C);
 	BKE_collection_unlink(sl, lc);
 
+	DAG_relations_tag_update(CTX_data_main(C));
 	WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
 	return OPERATOR_FINISHED;
 }
@@ -244,6 +247,7 @@ static int collection_new_exec(bContext *C, wmOperator *UNUSED(op))
 	SceneCollection *sc = BKE_collection_add(scene, NULL, NULL);
 	BKE_collection_link(sl, sc);
 
+	DAG_relations_tag_update(CTX_data_main(C));
 	WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
 	return OPERATOR_FINISHED;
 }
@@ -342,6 +346,7 @@ static int collection_delete_exec(bContext *C, wmOperator *UNUSED(op))
 	TODO_LAYER_OVERRIDE; /* handle overrides */
 	outliner_tree_traverse(soops, &soops->tree, 0, TSE_SELECTED, collection_delete_cb, &data);
 
+	DAG_relations_tag_update(CTX_data_main(C));
 	WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
 
 	return OPERATOR_FINISHED;
diff --git a/source/blender/editors/space_outliner/outliner_tools.c b/source/blender/editors/space_outliner/outliner_tools.c
index a2753dac64..34879c0958 100644
--- a/source/blender/editors/space_outliner/outliner_tools.c
+++ b/source/blender/editors/space_outliner/outliner_tools.c
@@ -847,11 +847,13 @@ static void collection_cb(int event, TreeElement *te, TreeStoreElem *UNUSED(tsel
 		}
 		else {
 			BKE_collection_unlink(sl, lc);
+			DAG_relations_tag_update(CTX_data_main(C));
 			WM_event_add_notifier(C, NC_SCENE | ND_LAYER, scene);
 		}
 	}
 	else if (event == OL_COLLECTION_OP_COLLECTION_DEL) {
 		if (BKE_collection_remove(scene, sc)) {
+			DAG_relations_tag_update(CTX_data_main(C));
 			WM_event_add_notifier(C, NC_SCENE | ND_LAYER, scene);
 		}
 		else {
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index f7e554bae1..555d715a17 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -2283,37 +2283,62 @@ static PointerRNA rna_SceneCollection_objects_get(CollectionPropertyIterator *it
 	return rna_pointer_inherit_refine(&iter->parent, &RNA_Object, ((LinkData *)internal->link)->data);
 }
 
-static int rna_SceneCollection_move_above(ID *id, SceneCollection *sc_src, SceneCollection *sc_dst)
+static int rna_SceneCollection_move_above(ID *id, SceneCollection *sc_src, Main *bmain, SceneCollection *sc_dst)
 {
 	Scene *scene = (Scene *)id;
-	return BKE_collection_move_above(scene, sc_dst, sc_src);
+
+	if (!BKE_collection_move_above(scene, sc_dst, sc_src)) {
+		return 0;
+	}
+
+	DAG_relations_tag_update(bmain);
+	WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+	return 1;
 }
 
-static int rna_SceneCollection_move_below(ID *id, SceneCollection *sc_src, SceneCollection *sc_dst)
+static int rna_SceneCollection_move_below(ID *id, SceneCollection *sc_src, Main *bmain, SceneCollection *sc_dst)
 {
 	Scene *scene = (Scene *)id;
-	return BKE_collection_move_below(scene, sc_dst, sc_src);
+
+	if (!BKE_collection_move_below(scene, sc_dst, sc_src)) {
+		return 0;
+	}
+
+	DAG_relations_tag_update(bmain);
+	WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+	return 1;
 }
 
-static int rna_SceneCollection_move_into(ID *id, SceneCollection *sc_src, SceneCollection *sc_dst)
+static int rna_SceneCollection_move_into(ID *id, SceneCollection *sc_src, Main *bmain, SceneCollection *sc_dst)
 {
 	Scene *scene = (Scene *)id;
-	return BKE_collection_move_into(scene, sc_dst, sc_src);
+
+	if (!BKE_collection_move_into(scene, sc_dst, sc_src)) {
+		return 0;
+	}
+
+	DAG_relations_tag_update(bmain);
+	WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+	return 1;
 }
 
-static SceneCollection *rna_SceneCollection_new(ID *id, SceneCollection *sc_parent, const char *name)
+static SceneCollection *rna_SceneCollection_new(
+        ID *id, SceneCollection *sc_parent, Main *bmain, const char *name)
 {
 	Scene *scene = (Scene *)id;
 	SceneCollection *sc = BKE_collection_add(scene, sc_parent, name);
 
-	DAG_id_tag_update(&scene->id, 0);
+	DAG_relations_tag_update(bmain);
 	WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
 
 	return sc;
 }
 
 static void rna_SceneCollection_remove(
-        ID *id, SceneCollection *sc_parent, ReportList *reports, PointerRNA *sc_ptr)
+        ID *id, SceneCollection *sc_parent, Main *bmain, ReportList *reports, PointerRNA *sc_ptr)
 {
 	Scene *scene = (Scene *)id;
 	SceneCollection *sc = sc_ptr->data;
@@ -2333,7 +2358,7 @@ static void rna_SceneCollection_remove(
 
 	RNA_POINTER_INVALIDATE(sc_ptr);
 
-	DAG_id_tag_update(&scene->id, 0);
+	DAG_relations_tag_update(bmain);
 	WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
 }
 
@@ -2590,22 +2615,46 @@ static PointerRNA rna_LayerCollection_mode_settings_get(ID *UNUSED(id), LayerCol
 	return rna_pointer_inherit_refine(&ptr, &RNA_CollectionModeSettings, ces);
 }
 
-static int rna_LayerCollection_move_above(ID *id, LayerCollection *lc_src, LayerCollection *lc_dst)
+static int rna_LayerCollection_move_above(ID *id, LayerCollection *lc_src, Main *bmain, LayerCollection *lc_dst)
 {
 	Scene *scene = (Scene *)id;
-	return BKE_layer_collection_move_above(scene, lc_dst, lc_src);
+
+	if (!BKE_layer_collection_move_above(scene, lc_dst, lc_src)) {
+		return 0;
+	}
+
+	DAG_relations_tag_update(bmain);
+	WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+	return 1;
 }
 
-static int rna_LayerCollection_move_below(ID *id, LayerCollection *lc_src, LayerCollection *lc_dst)
+static int rna_LayerCollection_move_below(ID *id, LayerCollection *lc_src, Main *bmain, LayerCollection *lc_dst)
 {
 	Scene *scene = (Scene *)id;
-	return BKE_layer_collection_move_below(scene, lc_dst, lc_src);
+
+	if (!BKE_layer_collection_move_below(scene, lc_dst, lc_src)) {
+		return 0;
+	}
+
+	DAG_relations_tag_update(bmain);
+	WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+	return 1;
 }
 
-static int rna_LayerCollection_move_into(ID *id, LayerCollection *lc_src, LayerCollection *lc_dst)
+static int rna_LayerCollection_move_into(ID *id, LayerCollection *lc_src, Main *bmain, LayerCollection *lc_dst)
 {
 	Scene *scene = (Scene *)id;
-	return BKE_layer_collection_move_into(scene, lc_dst, lc_src);
+
+	if (!BKE_layer_collection_move_into(scene, lc_dst, lc_src)) {
+		return 0;
+	}
+
+	DAG_relations_tag_update(bmain);
+	WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+	return 1;
 }
 
 static void rna_LayerCollection_hide_update(bContext *C, PointerRNA *UNUSED(ptr))
@@ -2674,7 +2723,6 @@ LayerCollection * rna_SceneLayer_collection_link(
 	Scene *scene = (Scene *)id;
 	LayerCollection *lc = BKE_collection_link(sl, sc);
 
-	/* TODO(sergey/dfelinto): Only update relations for the current scenelayer. */
 	DAG_relations_tag_update(bmain);
 	WM_main_add_notifier(NC_SCENE | ND_LAYER, scene);
 
@@ -2693,10 +2741,7 @@ static void rna_SceneLayer_collection_unlink(
 
 	BKE_collection_unlink(sl, lc);
 
-	/* needed otherwise the depgraph will contain freed objects which can crash, see [#20958] */
-	/* TODO(sergey/dfelinto): Only update relations for the current scenelayer. */
 	DAG_relations_tag_update(bmain);
-
 	WM_main_add_notifier(NC_SCENE | ND_LAYER | ND_OB_ACTIVE, scene);
 }
 
@@ -2857,12 +2902,14 @@ static void rna_SceneLayer_active_layer_set(PointerRNA *ptr, PointerRNA value)
 	if (index != -1) scene->active_layer = index;
 }
 
-static SceneLayer *rna_SceneLayer_new(ID *id, Scene *UNUSED(sce), const char *name)
+static SceneLayer *rna_SceneLayer_new(
+        ID *id, Scene *UNUSED(sce), Main *bmain, const char *name)
 {
 	Scene *scene = (Scene *)id;
 	SceneLayer *sl = BKE_scene_layer_add(scene, name);
 
 	DAG_id_tag_update(&scene->id, 0);
+	DAG_relations_tag_update(bmain);
 	WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
 
 	return sl;
@@ -5769,7 +5816,7 @@ static void rna_def_scene_collections(BlenderRNA *brna, PropertyRNA *cprop)
 
 	func = RNA_def_function(srna, "new", "rna_SceneCollection_new");
 	RNA_def_function_ui_description(func, "Add a collection to scene");
-	RNA_def_function_flag(func, FUNC_USE_SELF_ID);
+	RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN);
 	parm = RNA_def_string(func, "name", "SceneCollection", 0, "", "New name for the collection (not unique)");
 	RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
 	parm = RNA_def_pointer(func, "result", "SceneCollection", "", "Newly created collection");
@@ -5777,7 +5824,7 @@ static void rna_def_scene_collections(BlenderRNA *brna, PropertyRNA *cprop)
 
 	func = RNA_def_function(srna, "remove", "rna_SceneCollection_remove");
 	RNA_def_function_ui_description(func, "Remove a collection layer");
-	RNA_def_function_flag(func, FUNC_USE_REPORTS | FUNC_USE_SELF_ID);
+	RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN | FUNC_USE_REPORTS);
 	parm = RNA_def_pointer(func, "layer", "SceneCollection", "", "Collection to remove");
 	RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
 	RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0);
@@ -5859,2

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list