diff options
author | Mitchell Stokes <mogurijin@gmail.com> | 2014-05-14 02:50:28 +0400 |
---|---|---|
committer | Mitchell Stokes <mogurijin@gmail.com> | 2014-05-14 02:52:07 +0400 |
commit | 23b682d5948e98264340e6dc81237b81d299b5b0 (patch) | |
tree | cd77d22c248499771fa6e9e3915536c4540efa23 /source/gameengine/Converter/KX_BlenderSceneConverter.cpp | |
parent | 1d1560eec45b18d964155277384e1532e22677d1 (diff) |
Fix T40172: LibFree() crashes with shared materials (e.g., from multiple LibNew() calls)
Diffstat (limited to 'source/gameengine/Converter/KX_BlenderSceneConverter.cpp')
-rw-r--r-- | source/gameengine/Converter/KX_BlenderSceneConverter.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp index 5930d5e90d2..7d7f8ebd4b3 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp @@ -1237,6 +1237,16 @@ bool KX_BlenderSceneConverter::FreeBlendFile(struct Main *maggie) gameobj->RemoveMeshes(); /* XXX - slack, should only remove meshes that are library items but mostly objects only have 1 mesh */ break; } + else { + /* also free the mesh if it's using a tagged material */ + int mat_index = mesh->NumMaterials(); + while (mat_index--) { + if (IS_TAGGED(mesh->GetMeshMaterial(mat_index)->m_bucket->GetPolyMaterial()->GetBlenderMaterial())) { + gameobj->RemoveMeshes(); /* XXX - slack, same as above */ + break; + } + } + } } /* make sure action actuators are not referencing tagged actions */ |