[Bf-blender-cvs] [2b0162b] master: Fix T37289: ID User decrement error for Shapes on Bones when playing in BGE
Sergey Sharybin
noreply at git.blender.org
Mon Nov 18 12:19:36 CET 2013
Commit: 2b0162b6226df9dcb9b6819ce93f2d434afc69c4
Author: Sergey Sharybin
Date: Mon Nov 18 17:17:43 2013 +0600
http://developer.blender.org/rB2b0162b6226df9dcb9b6819ce93f2d434afc69c4
Fix T37289: ID User decrement error for Shapes on Bones when playing in BGE
GE was copying the pose channels without increasing user counter for a
custom bone shape object. Freeing copied pose will for give decrement
errors.
The same increment issue seems to happen in BKE_pose_copy_data, which
is also solved now.
===================================================================
M source/blender/blenkernel/intern/action.c
M source/gameengine/Converter/BL_ArmatureObject.cpp
===================================================================
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c
index fe0e3da..c91fae2 100644
--- a/source/blender/blenkernel/intern/action.c
+++ b/source/blender/blenkernel/intern/action.c
@@ -589,7 +589,15 @@ void BKE_pose_copy_data(bPose **dst, bPose *src, const bool copy_constraints)
outPose = MEM_callocN(sizeof(bPose), "pose");
BLI_duplicatelist(&outPose->chanbase, &src->chanbase);
-
+ if (outPose->chanbase.first) {
+ bPoseChannel *pchan;
+ for (pchan = outPose->chanbase.first; pchan; pchan = pchan->next) {
+ if (pchan->custom) {
+ id_us_plus(&pchan->custom->id);
+ }
+ }
+ }
+
outPose->iksolver = src->iksolver;
outPose->ikdata = NULL;
outPose->ikparam = MEM_dupallocN(src->ikparam);
diff --git a/source/gameengine/Converter/BL_ArmatureObject.cpp b/source/gameengine/Converter/BL_ArmatureObject.cpp
index d8ddb33..7ce1c7c 100644
--- a/source/gameengine/Converter/BL_ArmatureObject.cpp
+++ b/source/gameengine/Converter/BL_ArmatureObject.cpp
@@ -42,6 +42,7 @@
#include "BIK_api.h"
#include "BKE_action.h"
#include "BKE_armature.h"
+#include "BKE_library.h"
#include "BKE_constraint.h"
#include "CTR_Map.h"
@@ -120,6 +121,10 @@ void game_copy_pose(bPose **dst, bPose *src, int copy_constraint)
pchan->constraints.last = NULL;
}
+ if (pchan->custom) {
+ id_us_plus(&pchan->custom->id);
+ }
+
// fails to link, props are not used in the BGE yet.
#if 0
if (pchan->prop)
More information about the Bf-blender-cvs
mailing list