[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