]> git.mxchange.org Git - flightgear.git/blobdiff - src/Scenery/newcache.cxx
initialize release_keys array
[flightgear.git] / src / Scenery / newcache.cxx
index 033e11e8c911cdaef01062be649f975ad8de4b1f..643765d7651d06a7bfa31b2daaf58eb1738d6479 100644 (file)
@@ -2,7 +2,7 @@
 //
 // Written by Curtis Olson, started December 2000.
 //
-// Copyright (C) 2000  Curtis L. Olson  - curt@flightgear.org
+// Copyright (C) 2000  Curtis L. Olson  - http://www.flightgear.org/~curt
 //
 // This program is free software; you can redistribute it and/or
 // modify it under the terms of the GNU General Public License as
@@ -16,7 +16,7 @@
 //
 // You should have received a copy of the GNU General Public License
 // along with this program; if not, write to the Free Software
-// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 //
 // $Id$
 
@@ -25,8 +25,6 @@
 #  include <config.h>
 #endif
 
-#include <plib/ssg.h>          // plib include
-
 #include <simgear/bucket/newbucket.hxx>
 #include <simgear/debug/logstream.hxx>
 #include <simgear/misc/sg_path.hxx>
@@ -52,6 +50,7 @@ FGNewCache::FGNewCache( void ) :
 
 // Destructor
 FGNewCache::~FGNewCache( void ) {
+    clear_cache();
 }
 
 
@@ -231,7 +230,7 @@ void FGNewCache::clear_entry( long cache_index ) {
 
 // Clear all completely loaded tiles (ignores partially loaded tiles)
 void FGNewCache::clear_cache() {
-
+    std::vector<long> indexList;
     tile_map_iterator current = tile_cache.begin();
     tile_map_iterator end = tile_cache.end();
     
@@ -241,12 +240,16 @@ void FGNewCache::clear_cache() {
        FGTileEntry *e = current->second;
         if ( e->is_loaded() && (e->get_pending_models() == 0) ) {
             e->tile_bucket.make_bad();
-            entry_free(index);
+           // entry_free modifies tile_cache, so store index and call entry_free() later;
+           indexList.push_back( index);
         }
     }
-
+    for (unsigned int it = 0; it < indexList.size(); it++) {
+       entry_free( indexList[ it]);
+    }
     // and ... just in case we missed something ... 
-    globals->get_scenery()->get_terrain_branch()->removeAllKids();
+    osg::Group* group = globals->get_scenery()->get_terrain_branch();
+    group->removeChildren(0, group->getNumChildren());
 }