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