[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56050] trunk/blender/source/gameengine/ Converter: BGE: Cleaning up BL_ShapeDeformer's use of Blender's Key.

Mitchell Stokes mogurijin at gmail.com
Sun Apr 14 20:54:07 CEST 2013


Revision: 56050
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56050
Author:   moguri
Date:     2013-04-14 18:54:06 +0000 (Sun, 14 Apr 2013)
Log Message:
-----------
BGE: Cleaning up BL_ShapeDeformer's use of Blender's Key. This also fixes a bug with replicas (added objects) crashing when using shape keys.

Modified Paths:
--------------
    trunk/blender/source/gameengine/Converter/BL_ShapeDeformer.cpp
    trunk/blender/source/gameengine/Converter/BL_ShapeDeformer.h

Modified: trunk/blender/source/gameengine/Converter/BL_ShapeDeformer.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ShapeDeformer.cpp	2013-04-14 17:24:02 UTC (rev 56049)
+++ trunk/blender/source/gameengine/Converter/BL_ShapeDeformer.cpp	2013-04-14 18:54:06 UTC (rev 56050)
@@ -52,6 +52,7 @@
 #include "BKE_main.h"
 #include "BKE_key.h"
 #include "BKE_ipo.h"
+#include "BKE_library.h"
 #include "MT_Point3.h"
 
 extern "C"{
@@ -73,8 +74,7 @@
       m_useShapeDrivers(false),
       m_lastShapeUpdate(-1)
 {
-	m_key = m_bmesh->key;
-	m_bmesh->key = BKE_key_copy(m_key);
+	m_key = BKE_key_copy(m_bmesh->key);
 };
 
 /* this second constructor is needed for making a mesh deformable on the fly. */
@@ -90,18 +90,14 @@
 					m_useShapeDrivers(false),
 					m_lastShapeUpdate(-1)
 {
-	m_key = m_bmesh->key;
-	m_bmesh->key = BKE_key_copy(m_key);
+	m_key = BKE_key_copy(m_bmesh->key);
 };
 
 BL_ShapeDeformer::~BL_ShapeDeformer()
 {
-	if (m_key && m_bmesh->key && m_key != m_bmesh->key)
+	if (m_key)
 	{
-		BKE_key_free(m_bmesh->key);
-		BLI_remlink_safe(&G.main->key, m_bmesh->key);
-		MEM_freeN(m_bmesh->key);
-		m_bmesh->key = m_key;
+		BKE_libblock_free(&G.main->key, m_key);
 		m_key = NULL;
 	}
 };
@@ -119,6 +115,8 @@
 {
 	BL_SkinDeformer::ProcessReplica();
 	m_lastShapeUpdate = -1;
+
+	m_key = BKE_key_copy(m_key);
 }
 
 bool BL_ShapeDeformer::LoadShapeDrivers(Object* arma)
@@ -165,12 +163,12 @@
 		m_pMeshObject->CheckWeightCache(blendobj);
 
 		/* we will blend the key directly in m_transverts array: it is used by armature as the start position */
-		/* m_bmesh->key can be NULL in case of Modifier deformer */
-		if (m_bmesh->key) {
+		/* m_key can be NULL in case of Modifier deformer */
+		if (m_key) {
 			/* store verts locally */
 			VerifyStorage();
 
-			BKE_key_evaluate_relative(0, m_bmesh->totvert, m_bmesh->totvert, (char *)(float *)m_transverts, m_bmesh->key, NULL, 0); /* last arg is ignored */
+			BKE_key_evaluate_relative(0, m_bmesh->totvert, m_bmesh->totvert, (char *)(float *)m_transverts, m_key, NULL, 0); /* last arg is ignored */
 			m_bDynamic = true;
 		}
 
@@ -199,15 +197,11 @@
 #endif
 		bSkinUpdate = true;
 	}
+
 	return bSkinUpdate;
 }
 
 Key *BL_ShapeDeformer::GetKey()
 {
-	return m_bmesh->key;
+	return m_key;
 }
-
-void BL_ShapeDeformer::SetKey(Key *key)
-{
-	m_bmesh->key = key;
-}

Modified: trunk/blender/source/gameengine/Converter/BL_ShapeDeformer.h
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ShapeDeformer.h	2013-04-14 17:24:02 UTC (rev 56049)
+++ trunk/blender/source/gameengine/Converter/BL_ShapeDeformer.h	2013-04-14 18:54:06 UTC (rev 56050)
@@ -65,7 +65,6 @@
 	bool ExecuteShapeDrivers(void);
 
 	struct Key *GetKey();
-	void SetKey(struct Key *key);
 
 	void ForceUpdate()
 	{




More information about the Bf-blender-cvs mailing list