Commit: 1ce726adb91ebcc5d51cc017ffd8776ac744a36c
Author: Mitchell Stokes
Date:   Wed Apr 9 17:04:17 2014 -0700
https://developer.blender.org/rB1ce726adb91ebcc5d51cc017ffd8776ac744a36c

BGE: Allow skinned meshes with modifiers to do skinning updates in parallel.

===================================================================

M       source/gameengine/Converter/BL_ModifierDeformer.cpp
M       source/gameengine/Ketsji/KX_Scene.cpp

===================================================================

diff --git a/source/gameengine/Converter/BL_ModifierDeformer.cpp 
b/source/gameengine/Converter/BL_ModifierDeformer.cpp
index 7e64d16..71dc1bd 100644
--- a/source/gameengine/Converter/BL_ModifierDeformer.cpp
+++ b/source/gameengine/Converter/BL_ModifierDeformer.cpp
@@ -197,6 +197,15 @@ bool BL_ModifierDeformer::Update(void)
                }
                m_lastModifierUpdate=m_gameobj->GetLastFrame();
                bShapeUpdate = true;
+
+               int nmat = m_pMeshObject->NumMaterials();
+               for (int imat=0; imat<nmat; imat++) {
+                       RAS_MeshMaterial *mmat = 
m_pMeshObject->GetMeshMaterial(imat);
+                       RAS_MeshSlot **slot = mmat->m_slots[(void*)m_gameobj];
+                       if (!slot || !*slot)
+                               continue;
+                       (*slot)->m_pDerivedMesh = m_dm;
+               }
        }
        return bShapeUpdate;
 }
@@ -206,14 +215,5 @@ bool BL_ModifierDeformer::Apply(RAS_IPolyMaterial *mat)
        if (!Update())
                return false;
 
-       // drawing is based on derived mesh, must set it in the mesh slots
-       int nmat = m_pMeshObject->NumMaterials();
-       for (int imat=0; imat<nmat; imat++) {
-               RAS_MeshMaterial *mmat = m_pMeshObject->GetMeshMaterial(imat);
-               RAS_MeshSlot **slot = mmat->m_slots[(void*)m_gameobj];
-               if (!slot || !*slot)
-                       continue;
-               (*slot)->m_pDerivedMesh = m_dm;
-       }
        return true;
 }
diff --git a/source/gameengine/Ketsji/KX_Scene.cpp 
b/source/gameengine/Ketsji/KX_Scene.cpp
index e125dec..2e56029 100644
--- a/source/gameengine/Ketsji/KX_Scene.cpp
+++ b/source/gameengine/Ketsji/KX_Scene.cpp
@@ -1601,7 +1601,6 @@ void KX_Scene::AddAnimatedObject(CValue* gameobj)
 static void update_anim_thread_func(TaskPool *pool, void *taskdata, int 
UNUSED(threadid))
 {
        KX_GameObject *gameobj, *child;
-       RAS_Deformer *deformer;
        CListValue *children;
        bool needs_update;
        double curtime = *(double*)BLI_task_pool_userdata(pool);
@@ -1649,12 +1648,7 @@ static void update_anim_thread_func(TaskPool *pool, void 
*taskdata, int UNUSED(t
                for (int j=0; j<children->GetCount(); ++j) {
                        child = (KX_GameObject*)children->GetValue(j);
 
-                       deformer = child->GetDeformer();
-
-                       // This check is ugly, but the modifier deformer 
currently doesn't
-                       // work if called from here. This is a quick 
work-around to prevent
-                       // crashing, but it really should be fixed.
-                       if (deformer && 
!dynamic_cast<BL_ModifierDeformer*>(deformer)) {
+                       if (child->GetDeformer()) {
                                child->GetDeformer()->Update();
                        }
                }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to