[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38805] branches/soc-2011-pepper/source/ gameengine/Converter: BGE Animations: Save the deform number to pose channel map created by BL_SkinDeformer:: BGEDeformVerts() so it isn't recreated on every update.

Mitchell Stokes mogurijin at gmail.com
Fri Jul 29 03:59:38 CEST 2011


Revision: 38805
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38805
Author:   moguri
Date:     2011-07-29 01:59:36 +0000 (Fri, 29 Jul 2011)
Log Message:
-----------
BGE Animations: Save the deform number to pose channel map created by BL_SkinDeformer::BGEDeformVerts() so it isn't recreated on every update. This gives minor speed ups, but I mostly did it because I thought it was a little cleaner this way.

Modified Paths:
--------------
    branches/soc-2011-pepper/source/gameengine/Converter/BL_SkinDeformer.cpp
    branches/soc-2011-pepper/source/gameengine/Converter/BL_SkinDeformer.h

Modified: branches/soc-2011-pepper/source/gameengine/Converter/BL_SkinDeformer.cpp
===================================================================
--- branches/soc-2011-pepper/source/gameengine/Converter/BL_SkinDeformer.cpp	2011-07-29 01:24:03 UTC (rev 38804)
+++ branches/soc-2011-pepper/source/gameengine/Converter/BL_SkinDeformer.cpp	2011-07-29 01:59:36 UTC (rev 38805)
@@ -79,7 +79,8 @@
 							//m_defbase(&bmeshobj->defbase),
 							m_releaseobject(false),
 							m_poseApplied(false),
-							m_recalcNormal(true)
+							m_recalcNormal(true),
+							m_dfnrToPC(NULL)
 {
 	copy_m4_m4(m_obmat, bmeshobj->obmat);
 };
@@ -97,7 +98,8 @@
 		m_lastArmaUpdate(-1),
 		//m_defbase(&bmeshobj_old->defbase),
 		m_releaseobject(release_object),
-		m_recalcNormal(recalc_normal)
+		m_recalcNormal(recalc_normal),
+		m_dfnrToPC(NULL)
 	{
 		// this is needed to ensure correct deformation of mesh:
 		// the deformation is done with Blender's armature_deform_verts() function
@@ -111,6 +113,8 @@
 {
 	if(m_releaseobject && m_armobj)
 		m_armobj->Release();
+	if(m_dfnrToPC)
+		delete [] m_dfnrToPC;
 }
 
 void BL_SkinDeformer::Relink(CTR_Map<class CTR_HashedPtr, void*>*map)
@@ -179,6 +183,7 @@
 	BL_MeshDeformer::ProcessReplica();
 	m_lastArmaUpdate = -1;
 	m_releaseobject = false;
+	m_dfnrToPC = NULL;
 }
 
 void BL_SkinDeformer::BlenderDeformVerts()
@@ -201,25 +206,25 @@
 {
 	Object *par_arma = m_armobj->GetArmatureObject();
 	MDeformVert *dverts = m_bmesh->dvert;
-	MDeformVert *dvert;
 	bDeformGroup *dg;
-	bPoseChannel *pchan=NULL;
-	bPoseChannel **dfnrToPC;
 	int numGroups = BLI_countlist(&m_objMesh->defbase);
 
 	if (!dverts)
 		return;
 
-	dfnrToPC = new bPoseChannel*[numGroups];
-	int i;
-	for (i=0, dg=(bDeformGroup*)m_objMesh->defbase.first;
-		dg;
-		++i, dg=(bDeformGroup*)dg->next)
+	if (m_dfnrToPC == NULL)
 	{
-		dfnrToPC[i] = get_pose_channel(par_arma->pose, dg->name);
+		m_dfnrToPC = new bPoseChannel*[numGroups];
+		int i;
+		for (i=0, dg=(bDeformGroup*)m_objMesh->defbase.first;
+			dg;
+			++i, dg=(bDeformGroup*)dg->next)
+		{
+			m_dfnrToPC[i] = get_pose_channel(par_arma->pose, dg->name);
 
-		if (dfnrToPC[i] && dfnrToPC[i]->bone->flag & BONE_NO_DEFORM)
-			dfnrToPC[i] = NULL;
+			if (m_dfnrToPC[i] && m_dfnrToPC[i]->bone->flag & BONE_NO_DEFORM)
+				m_dfnrToPC[i] = NULL;
+		}
 	}
 
 
@@ -227,6 +232,8 @@
 	{
 		float contrib = 0.f, weight;
 		Bone *bone;
+		bPoseChannel *pchan=NULL;
+		MDeformVert *dvert;
 		Eigen::Vector4f co(0.f, 0.f, 0.f, 1.f);
 		Eigen::Vector4f vec(0, 0, 0, 1);
 		co[0] = m_transverts[i][0];
@@ -242,7 +249,7 @@
 		{
 			int index = dvert->dw[j].def_nr;
 
-			if (index < numGroups && (pchan=dfnrToPC[index]))
+			if (index < numGroups && (pchan=m_dfnrToPC[index]))
 			{
 				weight = dvert->dw[j].weight;
 				bone = pchan->bone;
@@ -271,9 +278,6 @@
 		m_transverts[i][1] = co[1];
 		m_transverts[i][2] = co[2];
 	}
-
-	if (dfnrToPC)
-		delete [] dfnrToPC;
 }
 
 bool BL_SkinDeformer::UpdateInternal(bool shape_applied)

Modified: branches/soc-2011-pepper/source/gameengine/Converter/BL_SkinDeformer.h
===================================================================
--- branches/soc-2011-pepper/source/gameengine/Converter/BL_SkinDeformer.h	2011-07-29 01:24:03 UTC (rev 38804)
+++ branches/soc-2011-pepper/source/gameengine/Converter/BL_SkinDeformer.h	2011-07-29 01:59:36 UTC (rev 38805)
@@ -109,6 +109,7 @@
 	bool					m_releaseobject;
 	bool					m_poseApplied;
 	bool					m_recalcNormal;
+	struct bPoseChannel**	m_dfnrToPC;
 
 	void BlenderDeformVerts();
 	void BGEDeformVerts();




More information about the Bf-blender-cvs mailing list