[Bf-blender-cvs] [e90468e5a3b] blender2.8: Depsgraph: Cleanup, use some utility functions to shorten construction code

Sergey Sharybin noreply at git.blender.org
Thu Jul 27 15:23:09 CEST 2017


Commit: e90468e5a3b94da47cdba8f5c77b8e896b274ef8
Author: Sergey Sharybin
Date:   Thu Jul 27 15:08:29 2017 +0200
Branches: blender2.8
https://developer.blender.org/rBe90468e5a3b94da47cdba8f5c77b8e896b274ef8

Depsgraph: Cleanup, use some utility functions to shorten construction code

Still some cleanup is possible.

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

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_layer.cc
M	source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc

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

diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 30fbe809236..5910a7d8338 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -305,6 +305,17 @@ ID *DepsgraphNodeBuilder::ensure_cow_id(ID *id_orig)
 	return id_node->id_cow;
 }
 
+ID *DepsgraphNodeBuilder::expand_cow_id(IDDepsNode *id_node)
+{
+	return deg_expand_copy_on_write_datablock(m_graph, id_node, this, true);
+}
+
+ID *DepsgraphNodeBuilder::expand_cow_id(ID *id_orig)
+{
+	IDDepsNode *id_node = add_id_node(id_orig);
+	return expand_cow_id(id_node);
+}
+
 /* **** Build functions for entity nodes **** */
 
 void DepsgraphNodeBuilder::begin_build(Main *bmain) {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
index b1d9ff52359..279cc92397b 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -85,6 +85,16 @@ struct DepsgraphNodeBuilder {
 		return (T *)get_cow_id(&orig->id);
 	}
 
+	/* Get fully expanded (ready for use) copy-on-write datablock for the given
+	 * original datablock.
+	 */
+	ID *expand_cow_id(IDDepsNode *id_node);
+	ID *expand_cow_id(ID *id_orig);
+	template<typename T>
+	T *expand_cow_datablock(T *orig) {
+		return (T *)expand_cow_id(&orig->id);
+	}
+
 	/* For a given COW datablock get corresponding original one. */
 	template<typename T>
 	T *get_orig_datablock(const T *cow) const {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_layer.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_layer.cc
index 80111840b6c..3ce0947a7b8 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_layer.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_layer.cc
@@ -98,9 +98,7 @@ void DepsgraphNodeBuilder::build_scene_layer_collections(Scene *scene)
 {
 #ifdef WITH_COPY_ON_WRITE
 	/* Make sure we've got ID node, so we can get pointer to CoW datablock. */
-	IDDepsNode *id_node = add_id_node(&scene->id);
-	Scene *scene_cow = (Scene *)deg_expand_copy_on_write_datablock(
-	        m_graph, id_node, this, true);
+	Scene *scene_cow = expand_cow_datablock(scene);
 #else
 	Scene *scene_cow = scene;
 #endif
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
index 9fb94a8cd91..dd8e46c5f3e 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
@@ -140,12 +140,8 @@ void DepsgraphNodeBuilder::build_rig(Scene *scene, Object *object)
 	 * safely create object level pose.
 	 */
 	Scene *scene_cow = get_cow_datablock(scene);
-	IDDepsNode *object_id_node = add_id_node(&object->id);
-	Object *object_cow = (Object *)deg_expand_copy_on_write_datablock(
-	        m_graph, object_id_node, this, true);
-	IDDepsNode *armature_id_node = add_id_node(&armature->id);
-	bArmature *armature_cow = (bArmature *)deg_expand_copy_on_write_datablock(
-	        m_graph, armature_id_node, this, true);
+	Object *object_cow = expand_cow_datablock(object);
+	bArmature *armature_cow = expand_cow_datablock(armature);
 #else
 	Scene *scene_cow = scene;
 	Object *object_cow = object;




More information about the Bf-blender-cvs mailing list