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-05-02 01:49:42 +0400
committerMitchell Stokes <mogurijin@gmail.com>2014-05-02 01:49:42 +0400
commit5f80a7ffe25fdda77904d06c8e7b6ff37731d25b (patch)
tree6535b37dfda976453c2b0259149ffec58ceb8f3b /source/gameengine/Converter/KX_BlenderSceneConverter.cpp
parentb75b0a11e0151a71e5d330f0833d1f5b5aa30e91 (diff)
Fix T39932: LibNew can't find LibLoaded meshes.
LibNew now searchs dynamic (i.e., LibLoaded) mains instead of just the current main.
Diffstat (limited to 'source/gameengine/Converter/KX_BlenderSceneConverter.cpp')
-rw-r--r--source/gameengine/Converter/KX_BlenderSceneConverter.cpp20
1 files changed, 17 insertions, 3 deletions
diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
index bad99b5518b..5930d5e90d2 100644
--- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
+++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
@@ -1458,6 +1458,20 @@ RAS_MeshObject *KX_BlenderSceneConverter::ConvertMeshSpecial(KX_Scene* kx_scene,
{
/* Find a mesh in the current main */
ID *me= static_cast<ID *>(BLI_findstring(&m_maggie->mesh, name, offsetof(ID, name) + 2));
+ Main *from_maggie = m_maggie;
+
+ if (me == NULL) {
+ // The mesh wasn't in the current main, try any dynamic (i.e., LibLoaded) ones
+ vector<Main*>::iterator it;
+
+ for (it = GetMainDynamic().begin(); it != GetMainDynamic().end(); it++) {
+ me = static_cast<ID *>(BLI_findstring(&(*it)->mesh, name, offsetof(ID, name) + 2));
+ from_maggie = *it;
+
+ if (me)
+ break;
+ }
+ }
if (me==NULL) {
printf("Could not be found \"%s\"\n", name);
@@ -1467,10 +1481,10 @@ RAS_MeshObject *KX_BlenderSceneConverter::ConvertMeshSpecial(KX_Scene* kx_scene,
/* Watch this!, if its used in the original scene can cause big troubles */
if (me->us > 0) {
printf("Mesh has a user \"%s\"\n", name);
- me = (ID*)BKE_mesh_copy((Mesh*)me);
+ me = (ID*)BKE_mesh_copy_ex(from_maggie, (Mesh*)me);
me->us--;
}
- BLI_remlink(&m_maggie->mesh, me); /* even if we made the copy it needs to be removed */
+ BLI_remlink(&from_maggie->mesh, me); /* even if we made the copy it needs to be removed */
BLI_addtail(&maggie->mesh, me);
@@ -1496,7 +1510,7 @@ RAS_MeshObject *KX_BlenderSceneConverter::ConvertMeshSpecial(KX_Scene* kx_scene,
mat_new->id.flag |= LIB_DOIT;
mat_old->id.us--;
- BLI_remlink(&m_maggie->mat, mat_new);
+ BLI_remlink(&G.main->mat, mat_new); // BKE_material_copy uses G.main, and there is no BKE_material_copy_ex
BLI_addtail(&maggie->mat, mat_new);
mesh->mat[i] = mat_new;