Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Stokes <mogurijin@gmail.com>2014-04-10 04:04:17 +0400
committerMitchell Stokes <mogurijin@gmail.com>2014-04-10 04:04:17 +0400
commit1ce726adb91ebcc5d51cc017ffd8776ac744a36c (patch)
tree34c31ccc1c26ba4281eb5129583f19051bcf555c /source/gameengine
parent19413644dac0f56623c520c5da2039ed0294c220 (diff)
BGE: Allow skinned meshes with modifiers to do skinning updates in parallel.
Diffstat (limited to 'source/gameengine')
-rw-r--r--source/gameengine/Converter/BL_ModifierDeformer.cpp18
-rw-r--r--source/gameengine/Ketsji/KX_Scene.cpp8
2 files changed, 10 insertions, 16 deletions
diff --git a/source/gameengine/Converter/BL_ModifierDeformer.cpp b/source/gameengine/Converter/BL_ModifierDeformer.cpp
index 7e64d16d012..71dc1bdec87 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 e125dec860e..2e560290732 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();
}
}