Revision: 16165 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16165 Author: blendix Date: 2008-08-18 12:27:48 +0200 (Mon, 18 Aug 2008)
Log Message: ----------- Apricot Branch: bugfix, some meshes were not deforming anymore after a recent commit. Modified Paths: -------------- branches/apricot/source/gameengine/Converter/BL_DeformableGameObject.cpp branches/apricot/source/gameengine/Converter/BL_MeshDeformer.cpp branches/apricot/source/gameengine/Converter/BL_MeshDeformer.h branches/apricot/source/gameengine/Converter/BL_ShapeDeformer.h branches/apricot/source/gameengine/Converter/BL_SkinDeformer.cpp branches/apricot/source/gameengine/Converter/BL_SkinDeformer.h Modified: branches/apricot/source/gameengine/Converter/BL_DeformableGameObject.cpp =================================================================== --- branches/apricot/source/gameengine/Converter/BL_DeformableGameObject.cpp 2008-08-18 10:24:56 UTC (rev 16164) +++ branches/apricot/source/gameengine/Converter/BL_DeformableGameObject.cpp 2008-08-18 10:27:48 UTC (rev 16165) @@ -41,12 +41,14 @@ delete m_pDeformer; // __NLA : Temporary until we decide where to put this } -void BL_DeformableGameObject::ProcessReplica(KX_GameObject* replica) +void BL_DeformableGameObject::ProcessReplica(KX_GameObject* replica) { + BL_MeshDeformer *deformer; KX_GameObject::ProcessReplica(replica); - if (m_pDeformer){ - ((BL_DeformableGameObject*)replica)->m_pDeformer = m_pDeformer->GetReplica(); + if (m_pDeformer) { + deformer = (BL_MeshDeformer*)m_pDeformer->GetReplica(); + ((BL_DeformableGameObject*)replica)->m_pDeformer = deformer; } } Modified: branches/apricot/source/gameengine/Converter/BL_MeshDeformer.cpp =================================================================== --- branches/apricot/source/gameengine/Converter/BL_MeshDeformer.cpp 2008-08-18 10:24:56 UTC (rev 16164) +++ branches/apricot/source/gameengine/Converter/BL_MeshDeformer.cpp 2008-08-18 10:27:48 UTC (rev 16165) @@ -90,8 +90,18 @@ delete [] m_transverts; if (m_transnors) delete [] m_transnors; -}; +} + +void BL_MeshDeformer::Relink(GEN_Map<class GEN_HashedPtr, void*>*map) +{ + void **h_obj = (*map)[m_gameobj]; + if (h_obj) + m_gameobj = (BL_DeformableGameObject*)(*h_obj); + else + m_gameobj = NULL; +} + /** * @warning This function is expensive! */ @@ -218,4 +228,4 @@ m_tvtot = m_bmesh->totvert; } } - + Modified: branches/apricot/source/gameengine/Converter/BL_MeshDeformer.h =================================================================== --- branches/apricot/source/gameengine/Converter/BL_MeshDeformer.h 2008-08-18 10:24:56 UTC (rev 16164) +++ branches/apricot/source/gameengine/Converter/BL_MeshDeformer.h 2008-08-18 10:27:48 UTC (rev 16165) @@ -47,7 +47,7 @@ public: void VerifyStorage(); void RecalcNormals(); - virtual void Relink(GEN_Map<class GEN_HashedPtr, void*>*map){}; + virtual void Relink(GEN_Map<class GEN_HashedPtr, void*>*map); BL_MeshDeformer(BL_DeformableGameObject *gameobj, struct Object* obj, class BL_SkinMeshObject *meshobj ): @@ -67,6 +67,7 @@ virtual RAS_Deformer* GetReplica(){return NULL;}; struct Mesh* GetMesh() { return m_bmesh; }; // virtual void InitDeform(double time){}; + protected: class BL_SkinMeshObject* m_pMeshObject; struct Mesh* m_bmesh; Modified: branches/apricot/source/gameengine/Converter/BL_ShapeDeformer.h =================================================================== --- branches/apricot/source/gameengine/Converter/BL_ShapeDeformer.h 2008-08-18 10:24:56 UTC (rev 16164) +++ branches/apricot/source/gameengine/Converter/BL_ShapeDeformer.h 2008-08-18 10:27:48 UTC (rev 16165) @@ -43,17 +43,6 @@ class BL_ShapeDeformer : public BL_SkinDeformer { public: - virtual void Relink(GEN_Map<class GEN_HashedPtr, void*>*map) - { - void **h_obj = (*map)[m_gameobj]; - if (h_obj){ - m_gameobj = (BL_DeformableGameObject*)(*h_obj); - } - else - m_gameobj=NULL; - // relink the underlying skin deformer - BL_SkinDeformer::Relink(map); - }; BL_ShapeDeformer(BL_DeformableGameObject *gameobj, Object *bmeshobj, BL_SkinMeshObject *mesh) Modified: branches/apricot/source/gameengine/Converter/BL_SkinDeformer.cpp =================================================================== --- branches/apricot/source/gameengine/Converter/BL_SkinDeformer.cpp 2008-08-18 10:24:56 UTC (rev 16164) +++ branches/apricot/source/gameengine/Converter/BL_SkinDeformer.cpp 2008-08-18 10:27:48 UTC (rev 16165) @@ -99,6 +99,20 @@ m_armobj->Release(); } +void BL_SkinDeformer::Relink(GEN_Map<class GEN_HashedPtr, void*>*map) +{ + if (m_armobj) { + void **h_obj = (*map)[m_armobj]; + + if (h_obj) + SetArmature( (BL_ArmatureObject*)(*h_obj) ); + else + m_armobj=NULL; + } + + BL_MeshDeformer::Relink(map); +} + bool BL_SkinDeformer::Apply(RAS_IPolyMaterial *mat) { RAS_MeshSlot::iterator it; @@ -152,7 +166,7 @@ /* See if the armature has been updated for this frame */ if (PoseUpdated()){ float obmat[4][4]; // the original object matrice - + /* XXX note: where_is_pose() (from BKE_armature.h) calculates all matrices needed to start deforming */ /* but it requires the blender object pointer... */ Object* par_arma = m_armobj->GetArmatureObject(); @@ -186,6 +200,7 @@ /* indicate that the m_transverts and normals are up to date */ return true; } + return false; } Modified: branches/apricot/source/gameengine/Converter/BL_SkinDeformer.h =================================================================== --- branches/apricot/source/gameengine/Converter/BL_SkinDeformer.h 2008-08-18 10:24:56 UTC (rev 16164) +++ branches/apricot/source/gameengine/Converter/BL_SkinDeformer.h 2008-08-18 10:27:48 UTC (rev 16165) @@ -50,17 +50,7 @@ { public: // void SetArmatureController (BL_ArmatureController *cont); - virtual void Relink(GEN_Map<class GEN_HashedPtr, void*>*map) - { - if (m_armobj){ - void **h_obj = (*map)[m_armobj]; - if (h_obj){ - SetArmature( (BL_ArmatureObject*)(*h_obj) ); - } - else - m_armobj=NULL; - } - } + virtual void Relink(GEN_Map<class GEN_HashedPtr, void*>*map); void SetArmature (class BL_ArmatureObject *armobj); BL_SkinDeformer(BL_DeformableGameObject *gameobj, _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs