[Bf-blender-cvs] [34b248b7469] blender2.8: Depsgraph: Synchronize collection visibility after copy

Sergey Sharybin noreply at git.blender.org
Mon Jul 24 17:06:43 CEST 2017


Commit: 34b248b74694eb5a1759aceca9b70ec430da60a5
Author: Sergey Sharybin
Date:   Mon Jul 24 17:03:53 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB34b248b74694eb5a1759aceca9b70ec430da60a5

Depsgraph: Synchronize collection visibility after copy

BKE_scene_copy explicitly ignores visibility of "source" collections make all
collections visible. This is also tested by regression tests.

While it seems more logical to simply preserve all possible visibility flags
and overrides, don't feel like submitting to a behavior-changes without talking
to author of those guards first.

This commit fixes cycles material preview.

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

M	source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc

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

diff --git a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
index 65cbf415843..00c2012e5f9 100644
--- a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
+++ b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
@@ -276,6 +276,21 @@ bool id_copy_no_main(const ID *id, ID **newid)
 	return result;
 }
 
+void layer_collections_sync_flags(ListBase *layer_collections_dst,
+                                  const ListBase *layer_collections_src)
+{
+	LayerCollection *layer_collection_dst = (LayerCollection *)layer_collections_dst->first;
+	const LayerCollection *layer_collection_src = (const LayerCollection *)layer_collections_src->first;
+	while (layer_collection_dst != NULL) {
+		layer_collection_dst->flag = layer_collection_src->flag;
+		layer_collections_sync_flags(&layer_collection_dst->layer_collections,
+		                             &layer_collection_src->layer_collections);
+		/* TODO(sergey): Overrides. */
+		layer_collection_dst = layer_collection_dst->next;
+		layer_collection_src = layer_collection_src->next;
+	}
+}
+
 /* Similar to BKE_scene_copy() but does not require main.
  *
  * TODO(sergey): Get rid of this once T51804 is handled.
@@ -298,6 +313,18 @@ Scene *scene_copy_no_main(Scene *scene)
 	                                  (Scene *)id_for_copy,
 	                                  SCE_COPY_LINK_OB);
 
+	/* TODO(sergey): Make this part of BKE_scene_copy(). */
+	{
+		SceneLayer *new_scene_layer = (SceneLayer *)new_scene->render_layers.first;
+		const SceneLayer *scene_layer = (const SceneLayer *)scene->render_layers.first;
+		while (new_scene_layer != NULL) {
+			layer_collections_sync_flags(&new_scene_layer->layer_collections,
+			                             &scene_layer->layer_collections);
+			new_scene_layer = new_scene_layer->next;
+			scene_layer = scene_layer->next;
+		}
+	}
+
 #ifdef NESTED_ID_NASTY_WORKAROUND
 	nested_id_hack_restore_pointers(&scene->id, &new_scene->id);
 #endif




More information about the Bf-blender-cvs mailing list