Pose: optimize pose rebuild for copy-on-write.
authorBrecht Van Lommel <brechtvanlommel@gmail.com>
Mon, 11 Jun 2018 18:26:29 +0000 (20:26 +0200)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Mon, 11 Jun 2018 18:48:18 +0000 (20:48 +0200)
Ref T55442.

source/blender/blenkernel/intern/action.c

index 01f6eab..28534fc 100644 (file)
@@ -426,7 +426,7 @@ bPoseChannel *BKE_pose_channel_verify(bPose *pose, const char *name)
                return NULL;
        
        /* See if this channel exists */
-       chan = BLI_findstring(&pose->chanbase, name, offsetof(bPoseChannel, name));
+       chan = BKE_pose_channel_find_name(pose, name);
        if (chan) {
                return chan;
        }
@@ -454,7 +454,9 @@ bPoseChannel *BKE_pose_channel_verify(bPose *pose, const char *name)
        chan->protectflag = OB_LOCK_ROT4D;  /* lock by components by default */
        
        BLI_addtail(&pose->chanbase, chan);
-       BKE_pose_channels_hash_free(pose);
+       if (pose->chanhash) {
+               BLI_ghash_insert(pose->chanhash, chan->name, chan);
+       }
        
        return chan;
 }