[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