diff options
author | Alexander Gavrilov <angavrilov@gmail.com> | 2019-04-18 21:19:57 +0300 |
---|---|---|
committer | Alexander Gavrilov <angavrilov@gmail.com> | 2019-04-18 21:32:17 +0300 |
commit | 7ec6bca92fd0ee4a3b1dcdf90fdba1f9d0aec11a (patch) | |
tree | aaf24d40b196131cf62bfaa1ff3340e7c17e6bf5 /source/blender/blenkernel/intern/action.c | |
parent | 64bcdd65bf0727c5e39ac2b3f32bf897bfbf07a1 (diff) |
Fix T63332: backup and restore bPoseChannel_Runtime data during COW.
Diffstat (limited to 'source/blender/blenkernel/intern/action.c')
-rw-r--r-- | source/blender/blenkernel/intern/action.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c index a3b7df6b020..885ddc5b9c2 100644 --- a/source/blender/blenkernel/intern/action.c +++ b/source/blender/blenkernel/intern/action.c @@ -793,15 +793,25 @@ void BKE_pose_channel_free_ex(bPoseChannel *pchan, bool do_id_user) /* Cached data, for new draw manager rendering code. */ MEM_SAFE_FREE(pchan->draw_data); - /* Cached B-Bone shape data. */ - BKE_pose_channel_free_bbone_cache(pchan); + /* Cached B-Bone shape and other data. */ + BKE_pose_channel_runtime_free(&pchan->runtime); } -/** Deallocates runtime cache of a pose channel's B-Bone shape. */ -void BKE_pose_channel_free_bbone_cache(bPoseChannel *pchan) +/** Clears the runtime cache of a pose channel without free. */ +void BKE_pose_channel_runtime_reset(bPoseChannel_Runtime *runtime) { - bPoseChannel_Runtime *runtime = &pchan->runtime; + memset(runtime, 0, sizeof(*runtime)); +} +/** Deallocates runtime cache of a pose channel */ +void BKE_pose_channel_runtime_free(bPoseChannel_Runtime *runtime) +{ + BKE_pose_channel_free_bbone_cache(runtime); +} + +/** Deallocates runtime cache of a pose channel's B-Bone shape. */ +void BKE_pose_channel_free_bbone_cache(bPoseChannel_Runtime *runtime) +{ runtime->bbone_segments = 0; MEM_SAFE_FREE(runtime->bbone_rest_mats); MEM_SAFE_FREE(runtime->bbone_pose_mats); |