[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48709] branches/soc-2012-swiss_cheese/ source/gameengine/Converter: The onFinish callbacks for KX_LibLoadStatus are now called after the scene has been merged .
Mitchell Stokes
mogurijin at gmail.com
Sat Jul 7 09:38:43 CEST 2012
Revision: 48709
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48709
Author: moguri
Date: 2012-07-07 07:38:42 +0000 (Sat, 07 Jul 2012)
Log Message:
-----------
The onFinish callbacks for KX_LibLoadStatus are now called after the scene has been merged. This will slightly mess up the timeTaken stat (it will include time waiting to synchronize and do the merge), but at least you'll be able to access the newly loaded object in the callback.
Modified Paths:
--------------
branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_BlenderSceneConverter.h
Modified: branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
===================================================================
--- branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_BlenderSceneConverter.cpp 2012-07-07 07:01:59 UTC (rev 48708)
+++ branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_BlenderSceneConverter.cpp 2012-07-07 07:38:42 UTC (rev 48709)
@@ -953,18 +953,31 @@
void KX_BlenderSceneConverter::MergeAsyncLoads()
{
- vector<pair<KX_Scene*,KX_Scene*> >::iterator sit;
- for (sit=m_mergequeue.begin(); sit!=m_mergequeue.end(); ++sit) {
- (*sit).first->MergeScene((*sit).second);
- delete (*sit).second;
+ vector<KX_Scene*> *merge_scenes;
+
+ vector<KX_LibLoadStatus*>::iterator mit;
+ vector<KX_Scene*>::iterator sit;
+
+ for (mit=m_mergequeue.begin(); mit!=m_mergequeue.end(); ++mit) {
+ merge_scenes = (vector<KX_Scene*>*)(*mit)->GetData();
+
+ for (sit=merge_scenes->begin(); sit!=merge_scenes->end(); ++sit) {
+ (*mit)->GetMergeScene()->MergeScene(*sit);
+ delete (*sit);
+ }
+
+ delete (*mit)->GetData();
+ (*mit)->SetData(NULL);
+
+ (*mit)->Finish();
}
m_mergequeue.clear();
}
-void KX_BlenderSceneConverter::AddScenesToMergeQueue(KX_Scene *merge_scene, KX_Scene *other)
+void KX_BlenderSceneConverter::AddScenesToMergeQueue(KX_LibLoadStatus *status)
{
- m_mergequeue.push_back(pair<KX_Scene*,KX_Scene*>(merge_scene, other));
+ m_mergequeue.push_back(status);
}
static void *async_convert(void *ptr)
@@ -972,20 +985,22 @@
KX_Scene *new_scene = NULL;
KX_LibLoadStatus *status = (KX_LibLoadStatus*)ptr;
vector<Scene*> *scenes = (vector<Scene*>*)status->GetData();
+ vector<KX_Scene*> *merge_scenes = new vector<KX_Scene*>(); // Deleted in MergeAsyncLoads
for (unsigned int i=0; i<scenes->size(); ++i) {
new_scene = status->GetEngine()->CreateScene((*scenes)[i]);
if (new_scene)
- status->GetConverter()->AddScenesToMergeQueue(status->GetMergeScene(), new_scene);
+ merge_scenes->push_back(new_scene);
- status->AddProgress(1.f/scenes->size());
+ status->AddProgress((1.f/scenes->size())*0.9f); // We'll call conversion 90% and merging 10% for now
}
- status->Finish();
+ delete status->GetData();
+ status->SetData(merge_scenes);
- delete status->GetData();
- status->SetData(NULL);
+ status->GetConverter()->AddScenesToMergeQueue(status);
+
return NULL;
}
@@ -1149,6 +1164,9 @@
}
}
}
+
+ if (!(options & LIB_LOAD_ASYNC))
+ status->Finish();
return status;
}
Modified: branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_BlenderSceneConverter.h
===================================================================
--- branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_BlenderSceneConverter.h 2012-07-07 07:01:59 UTC (rev 48708)
+++ branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_BlenderSceneConverter.h 2012-07-07 07:38:42 UTC (rev 48709)
@@ -62,7 +62,7 @@
vector<pair<KX_Scene*,RAS_MeshObject*> > m_meshobjects;
vector<pair<KX_Scene*,BL_Material *> > m_materials;
- vector<pair<KX_Scene*,KX_Scene*> > m_mergequeue;
+ vector<class KX_LibLoadStatus*> m_mergequeue;
ThreadInfo *m_threadinfo;
// Cached material conversions
@@ -171,7 +171,7 @@
bool FreeBlendFile(const char *path);
virtual void MergeAsyncLoads();
- void AddScenesToMergeQueue(KX_Scene *merge_scene, KX_Scene *other);
+ void AddScenesToMergeQueue(class KX_LibLoadStatus *status);
void PrintStats() {
printf("BGE STATS!\n");
More information about the Bf-blender-cvs
mailing list