[Bf-blender-cvs] [1ce726a] master: BGE: Allow skinned meshes with modifiers to do skinning updates in parallel.

Mitchell Stokes noreply at git.blender.org
Thu Apr 10 02:05:16 CEST 2014


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();
 			}
 		}




More information about the Bf-blender-cvs mailing list