[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