[Bf-blender-cvs] [4c30a9e] master: Depsgraph: Speedup initial rig build time

Sergey Sharybin noreply at git.blender.org
Mon Nov 7 11:44:11 CET 2016


Commit: 4c30a9ee42c386a0938df9f6fa4956116ffbec46
Author: Sergey Sharybin
Date:   Thu Nov 3 17:47:38 2016 +0100
Branches: master
https://developer.blender.org/rB4c30a9ee42c386a0938df9f6fa4956116ffbec46

Depsgraph: Speedup initial rig build time

We don't need to sort bone channels, it's all taken care about
by the depsgraph itself.

Gives up to 30% initial rig construction time speedup.

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

M	source/blender/blenkernel/BKE_armature.h
M	source/blender/blenkernel/intern/armature.c
M	source/blender/depsgraph/intern/builder/deg_builder_nodes.cc

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

diff --git a/source/blender/blenkernel/BKE_armature.h b/source/blender/blenkernel/BKE_armature.h
index c232310..78d6f6c 100644
--- a/source/blender/blenkernel/BKE_armature.h
+++ b/source/blender/blenkernel/BKE_armature.h
@@ -97,6 +97,7 @@ void BKE_armature_where_is(struct bArmature *arm);
 void BKE_armature_where_is_bone(struct Bone *bone, struct Bone *prevbone, const bool use_recursion);
 void BKE_pose_clear_pointers(struct bPose *pose);
 void BKE_pose_rebuild(struct Object *ob, struct bArmature *arm);
+void BKE_pose_rebuild_ex(struct Object *ob, struct bArmature *arm, const bool sort_bones);
 void BKE_pose_where_is(struct Scene *scene, struct Object *ob);
 void BKE_pose_where_is_bone(struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan, float ctime, bool do_extra);
 void BKE_pose_where_is_bone_tail(struct bPoseChannel *pchan);
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index c644fe0..aaec3a9 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -1916,7 +1916,7 @@ void BKE_pose_clear_pointers(bPose *pose)
 
 /* only after leave editmode, duplicating, validating older files, library syncing */
 /* NOTE: pose->flag is set for it */
-void BKE_pose_rebuild(Object *ob, bArmature *arm)
+void BKE_pose_rebuild_ex(Object *ob, bArmature *arm, const bool sort_bones)
 {
 	Bone *bone;
 	bPose *pose;
@@ -1963,8 +1963,9 @@ void BKE_pose_rebuild(Object *ob, bArmature *arm)
 #ifdef WITH_LEGACY_DEPSGRAPH
 	/* the sorting */
 	/* Sorting for new dependnecy graph is done on the scene graph level. */
-	if (counter > 1)
+	if (counter > 1 && sort_bones) {
 		DAG_pose_sort(ob);
+	}
 #endif
 
 	ob->pose->flag &= ~POSE_RECALC;
@@ -1973,6 +1974,11 @@ void BKE_pose_rebuild(Object *ob, bArmature *arm)
 	BKE_pose_channels_hash_make(ob->pose);
 }
 
+void BKE_pose_rebuild(Object *ob, bArmature *arm)
+{
+	BKE_pose_rebuild_ex(ob, arm, true);
+}
+
 /* ********************** THE POSE SOLVER ******************* */
 
 /* loc/rot/size to given mat4 */
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 445b720..b58e1b04 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -831,7 +831,7 @@ void DepsgraphNodeBuilder::build_rig(Scene *scene, Object *ob)
 
 	/* Rebuild pose if not up to date. */
 	if (ob->pose == NULL || (ob->pose->flag & POSE_RECALC)) {
-		BKE_pose_rebuild(ob, arm);
+		BKE_pose_rebuild_ex(ob, arm, false);
 		/* XXX: Without this animation gets lost in certain circumstances
 		 * after loading file. Need to investigate further since it does
 		 * not happen with simple scenes..




More information about the Bf-blender-cvs mailing list