diff --git a/data/glest_game b/data/glest_game index b1c0f0cc..5517be4d 160000 --- a/data/glest_game +++ b/data/glest_game @@ -1 +1 @@ -Subproject commit b1c0f0cc18cdd2311b581b44e7ae161317438c93 +Subproject commit 5517be4d27fd05ff4379b23c84fe8f6aed183f0b diff --git a/source/g3d_viewer/main.cpp b/source/g3d_viewer/main.cpp index 9386cb15..1f0c9203 100644 --- a/source/g3d_viewer/main.cpp +++ b/source/g3d_viewer/main.cpp @@ -299,6 +299,9 @@ MainWindow::MainWindow( std::pair > unitToLoad, this->appPath = appPath; Properties::setApplicationPath(executable_path(appPath)); + lastanim = 0; + model= NULL; + Config &config = Config::getInstance(); //getGlPlatformExtensions(); @@ -313,8 +316,6 @@ MainWindow::MainWindow( std::pair > unitToLoad, glCanvas->SetCurrent(); #endif - lastanim = 0; - model= NULL; unitPath = unitToLoad; if(modelPath != "") { @@ -555,8 +556,9 @@ MainWindow::~MainWindow(){ delete fileDialog; fileDialog = NULL; - delete model; - model = NULL; + //delete model; + //model = NULL; + if(renderer) renderer->end(); delete renderer; renderer = NULL; @@ -742,7 +744,6 @@ void MainWindow::onClose(wxCloseEvent &event){ particleSplashPathList.clear(); // as above if(timer) timer->Stop(); - if(renderer) renderer->end(); unitParticleSystems.clear(); unitParticleSystemTypes.clear(); @@ -752,8 +753,9 @@ void MainWindow::onClose(wxCloseEvent &event){ splashParticleSystems.clear(); // as above splashParticleSystemTypes.clear(); - delete model; - model = NULL; + //delete model; + //model = NULL; + if(renderer) renderer->end(); //printf("OnClose about to END\n"); //fflush(stdout); @@ -1112,7 +1114,9 @@ void MainWindow::onMenuFileClearAll(wxCommandEvent &event) { splashParticleSystems.clear(); // as above splashParticleSystemTypes.clear(); - delete model; + //delete model; + //model = NULL; + if(model != NULL && renderer != NULL) renderer->endModel(rsGlobal, model); model = NULL; loadUnit("",""); @@ -1284,7 +1288,9 @@ void MainWindow::loadModel(string path) { //printf("Loading model [%s] %u of " MG_SIZE_T_SPECIFIER "\n",modelPath.c_str(),idx, this->modelPathList.size()); if(timer) timer->Stop(); - delete model; + //delete model; + if(model != NULL && renderer != NULL) renderer->endModel(rsGlobal, model); + model = NULL; model = renderer? renderer->newModel(rsGlobal, modelPath): NULL; statusbarText = getModelInfo(); @@ -1859,7 +1865,7 @@ void MainWindow::onTimer(wxTimerEvent &event) { string MainWindow::getModelInfo() { string str; - if(model!=NULL){ + if(model != NULL) { str+= "Meshes: "+intToStr(model->getMeshCount()); str+= ", Vertices: "+intToStr(model->getVertexCount()); str+= ", Triangles: "+intToStr(model->getTriangleCount()); diff --git a/source/g3d_viewer/renderer.cpp b/source/g3d_viewer/renderer.cpp index 86266a09..d8b7754e 100644 --- a/source/g3d_viewer/renderer.cpp +++ b/source/g3d_viewer/renderer.cpp @@ -200,6 +200,10 @@ Model * Renderer::newModel(ResourceScope rs,const string &path,bool deletePixMap return modelManager->newModel(path,deletePixMapAfterLoad,loadedFileList,sourceLoader); } +void Renderer::endModel(ResourceScope rs,Model *model) { + modelManager->endModel(model); +} + void Renderer::init() { assertGl(); diff --git a/source/g3d_viewer/renderer.h b/source/g3d_viewer/renderer.h index c70b8eca..f9a88146 100644 --- a/source/g3d_viewer/renderer.h +++ b/source/g3d_viewer/renderer.h @@ -147,6 +147,7 @@ public: Texture2D * getNewTexture2D(); Model *newModel(ResourceScope rs,const string &path,bool deletePixMapAfterLoad=false,std::map > > *loadedFileList=NULL, string *sourceLoader=NULL); + void endModel(ResourceScope rs,Model *model); Texture2D *newTexture2D(ResourceScope rs) { return getNewTexture2D(); } void initTextureManager();