Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Gavrilov <angavrilov@gmail.com>2019-04-18 21:19:57 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2019-04-18 21:32:17 +0300
commit7ec6bca92fd0ee4a3b1dcdf90fdba1f9d0aec11a (patch)
treeaaf24d40b196131cf62bfaa1ff3340e7c17e6bf5 /source/blender/blenkernel/intern/action.c
parent64bcdd65bf0727c5e39ac2b3f32bf897bfbf07a1 (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.c20
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);