[Bf-blender-cvs] [a41bbfb7f3] blender2.8: Depsgraph fix for scene layers

Dalai Felinto noreply at git.blender.org
Thu Feb 9 16:46:15 CET 2017


Commit: a41bbfb7f395c0dd022c5489afef4bae4d739c8c
Author: Dalai Felinto
Date:   Thu Feb 9 16:46:05 2017 +0100
Branches: blender2.8
https://developer.blender.org/rBa41bbfb7f395c0dd022c5489afef4bae4d739c8c

Depsgraph fix for scene layers

Objects can be moved around freely now

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

M	source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M	source/blender/depsgraph/intern/builder/deg_builder_nodes.h
M	source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc
M	source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc

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

diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 373d9dc434..0f0d16907f 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -125,7 +125,7 @@ static void modifier_walk(void *user_data,
 {
 	BuilderWalkUserData *data = (BuilderWalkUserData *)user_data;
 	if (*obpoin) {
-		data->builder->build_object(data->scene, NULL, *obpoin);
+		data->builder->build_object(data->scene, *obpoin);
 	}
 }
 
@@ -138,7 +138,7 @@ void constraint_walk(bConstraint * /*con*/,
 	if (*idpoin) {
 		ID *id = *idpoin;
 		if (GS(id->name) == ID_OB) {
-			data->builder->build_object(data->scene, NULL, (Object *)id);
+			data->builder->build_object(data->scene, (Object *)id);
 		}
 	}
 }
@@ -337,9 +337,7 @@ void DepsgraphNodeBuilder::begin_build(Main *bmain) {
 	} FOREACH_NODETREE_END
 }
 
-void DepsgraphNodeBuilder::build_group(Scene *scene,
-                                       BaseLegacy *base,
-                                       Group *group)
+void DepsgraphNodeBuilder::build_group(Scene *scene, Group *group)
 {
 	ID *group_id = &group->id;
 	if (group_id->tag & LIB_TAG_DOIT) {
@@ -348,7 +346,7 @@ void DepsgraphNodeBuilder::build_group(Scene *scene,
 	group_id->tag |= LIB_TAG_DOIT;
 
 	LINKLIST_FOREACH (GroupObject *, go, &group->gobject) {
-		build_object(scene, base, go->ob);
+		build_object(scene, go->ob);
 	}
 }
 
@@ -387,7 +385,7 @@ SubgraphDepsNode *DepsgraphNodeBuilder::build_subgraph(Group *group)
 	return subgraph_node;
 }
 
-void DepsgraphNodeBuilder::build_object(Scene *scene, BaseLegacy *base, Object *ob)
+void DepsgraphNodeBuilder::build_object(Scene *scene, Object *ob)
 {
 	const bool has_object = (ob->id.tag & LIB_TAG_DOIT);
 	IDDepsNode *id_node = (has_object)
@@ -397,9 +395,12 @@ void DepsgraphNodeBuilder::build_object(Scene *scene, BaseLegacy *base, Object *
 	 * Do it for both new and existing ID nodes. This is so because several
 	 * bases might be sharing same object.
 	 */
-	if (base != NULL) {
-		id_node->layers |= base->lay;
-	}
+
+	/* Blender 2.8 transition: we don't have bases and do not have
+	 * layer masks, but still want objects to be updated
+	 */
+	id_node->layers |= ((1 << 20) - 1);
+
 	if (ob == scene->camera) {
 		/* Camera should always be updated, it used directly by viewport. */
 		id_node->layers |= (unsigned int)(-1);
@@ -415,7 +416,7 @@ void DepsgraphNodeBuilder::build_object(Scene *scene, BaseLegacy *base, Object *
 	build_object_transform(scene, ob);
 
 	if (ob->parent != NULL) {
-		build_object(scene, NULL, ob->parent);
+		build_object(scene, ob->parent);
 	}
 	if (ob->modifiers.first != NULL) {
 		BuilderWalkUserData data;
@@ -927,13 +928,13 @@ void DepsgraphNodeBuilder::build_obdata_geom(Scene *scene, Object *ob)
 			 */
 			Curve *cu = (Curve *)obdata;
 			if (cu->bevobj != NULL) {
-				build_object(scene, NULL, cu->bevobj);
+				build_object(scene, cu->bevobj);
 			}
 			if (cu->taperobj != NULL) {
-				build_object(scene, NULL, cu->taperobj);
+				build_object(scene, cu->taperobj);
 			}
 			if (ob->type == OB_FONT && cu->textoncurve != NULL) {
-				build_object(scene, NULL, cu->textoncurve);
+				build_object(scene, cu->textoncurve);
 			}
 			break;
 		}
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
index ab66fb9016..2f3f733b8d 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -32,10 +32,6 @@
 
 #include "intern/depsgraph_types.h"
 
-/* XXX: Temporary solution to get proper Baselegacy. */
-#include "DNA_scene_types.h"
-
-struct BaseLegacy;
 struct CacheFile;
 struct bGPdata;
 struct ListBase;
@@ -129,8 +125,8 @@ struct DepsgraphNodeBuilder {
 
 	void build_scene(Main *bmain, Scene *scene);
 	SubgraphDepsNode *build_subgraph(Group *group);
-	void build_group(Scene *scene, BaseLegacy *base, Group *group);
-	void build_object(Scene *scene, BaseLegacy *base, Object *ob);
+	void build_group(Scene *scene, Group *group);
+	void build_object(Scene *scene, Object *ob);
 	void build_object_transform(Scene *scene, Object *ob);
 	void build_object_constraints(Scene *scene, Object *ob);
 	void build_pose_constraints(Object *ob, bPoseChannel *pchan);
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc
index 507f257292..c7e8edb122 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc
@@ -46,6 +46,7 @@ extern "C" {
 #include "DNA_object_types.h"
 #include "DNA_scene_types.h"
 
+#include "BKE_layer.h"
 #include "BKE_main.h"
 #include "BKE_node.h"
 
@@ -79,24 +80,25 @@ void DepsgraphNodeBuilder::build_scene(Main *bmain, Scene *scene)
 	}
 
 	/* scene objects */
-	LINKLIST_FOREACH (BaseLegacy *, base, &scene->base) {
-		Object *ob = base->object;
-
+	Object *ob;
+	FOREACH_SCENE_OBJECT(scene, ob)
+	{
 		/* object itself */
-		build_object(scene, base, ob);
+		build_object(scene, ob);
 
 		/* object that this is a proxy for */
 		// XXX: the way that proxies work needs to be completely reviewed!
 		if (ob->proxy) {
 			ob->proxy->proxy_from = ob;
-			build_object(scene, base, ob->proxy);
+			build_object(scene, ob->proxy);
 		}
 
 		/* Object dupligroup. */
 		if (ob->dup_group) {
-			build_group(scene, base, ob->dup_group);
+			build_group(scene, ob->dup_group);
 		}
 	}
+	FOREACH_SCENE_OBJECT_END
 
 	/* rigidbody */
 	if (scene->rigidbody_world) {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc
index 8b68516a02..2f49d5b164 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc
@@ -46,6 +46,7 @@ extern "C" {
 #include "DNA_object_types.h"
 #include "DNA_scene_types.h"
 
+#include "BKE_layer.h"
 #include "BKE_main.h"
 #include "BKE_node.h"
 
@@ -74,9 +75,9 @@ void DepsgraphRelationBuilder::build_scene(Main *bmain, Scene *scene)
 	}
 
 	/* scene objects */
-	LINKLIST_FOREACH (BaseLegacy *, base, &scene->base) {
-		Object *ob = base->object;
-
+	Object *ob;
+	FOREACH_SCENE_OBJECT(scene, ob)
+	{
 		/* object itself */
 		build_object(bmain, scene, ob);
 
@@ -97,6 +98,7 @@ void DepsgraphRelationBuilder::build_scene(Main *bmain, Scene *scene)
 			build_group(bmain, scene, ob, ob->dup_group);
 		}
 	}
+	FOREACH_SCENE_OBJECT_END
 
 	/* rigidbody */
 	if (scene->rigidbody_world) {




More information about the Bf-blender-cvs mailing list