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:
-rw-r--r--source/gameengine/Converter/KX_BlenderSceneConverter.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
index 1a489c301e2..9e53d9e1569 100644
--- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
+++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
@@ -903,7 +903,7 @@ KX_LibLoadStatus *KX_BlenderSceneConverter::LinkBlendFile(BlendHandle *bpy_openl
*err_str = err_local;
return NULL;
}
-
+
main_newlib = BKE_main_new();
BKE_reports_init(&reports, RPT_STORE);
@@ -1218,6 +1218,8 @@ bool KX_BlenderSceneConverter::FreeBlendFile(Main *maggie)
bmat = bl_mat->GetBlenderMaterial();
if (IS_TAGGED(bmat)) {
+ // Remove the poly material coresponding to this Blender Material.
+ m_polymat_cache[polymit->first].erase(bmat);
delete (*polymit).second;
*polymit = m_polymaterials.back();
m_polymaterials.pop_back();
@@ -1233,6 +1235,8 @@ bool KX_BlenderSceneConverter::FreeBlendFile(Main *maggie)
for (i = 0, matit = m_materials.begin(); i < size; ) {
BL_Material *mat = (*matit).second;
if (IS_TAGGED(mat->material)) {
+ // Remove the bl material coresponding to this Blender Material.
+ m_mat_cache[matit->first].erase(mat->material);
delete (*matit).second;
*matit = m_materials.back();
m_materials.pop_back();
@@ -1354,6 +1358,16 @@ bool KX_BlenderSceneConverter::MergeScene(KX_Scene *to, KX_Scene *from)
}
}
+ MaterialCache::iterator matcacheit = m_mat_cache.find(from);
+ // Merge cached BL_Material map.
+ m_mat_cache[to].insert(matcacheit->second.begin(), matcacheit->second.end());
+ m_mat_cache.erase(matcacheit);
+
+ PolyMaterialCache::iterator polymatcacheit = m_polymat_cache.find(from);
+ // Merge cached RAS_IPolyMaterial map.
+ m_polymat_cache[to].insert(polymatcacheit->second.begin(), polymatcacheit->second.end());
+ m_polymat_cache.erase(polymatcacheit);
+
return true;
}