From 1d1b60699f0a7ce6a344abda0ee5b84c8485f9a0 Mon Sep 17 00:00:00 2001 From: curt Date: Mon, 14 Jun 1999 13:47:44 +0000 Subject: [PATCH] Fixed a bug in tilecache size which caused occasional tiles to drop out when more than one row is scheduled "simultaneously". --- Simulator/Scenery/tilecache.cxx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Simulator/Scenery/tilecache.cxx b/Simulator/Scenery/tilecache.cxx index 6e4acb4d2..67ef6deec 100644 --- a/Simulator/Scenery/tilecache.cxx +++ b/Simulator/Scenery/tilecache.cxx @@ -67,8 +67,8 @@ FGTileCache::init( void ) // // target_cache_size >= (current.options.tile_diameter + 1) ** 2 // - int side = current_options.get_tile_diameter() + 1; - int target_cache_size = side * side; + int side = current_options.get_tile_diameter() + 2; + int target_cache_size = (side*side); FG_LOG( FG_TERRAIN, FG_DEBUG, " target cache size = " << target_cache_size ); FG_LOG( FG_TERRAIN, FG_DEBUG, " current cache size = " @@ -166,12 +166,17 @@ FGTileCache::next_avail( void ) int max_index; max_dist = 0.0; - max_index = 0; + max_index = -1; for ( i = 0; i < (int)tile_cache.size(); i++ ) { + // only look at freeing NON-scheduled (i.e. ready to load + // cache entries. This assumes that the cache is always big + // enough for our tile radius! + if ( tile_cache[i].is_unused() ) { + // favor unused cache slots return(i); - } else { + } else if ( tile_cache[i].is_loaded() ) { // calculate approximate distance from view point abs_view_pos = current_view.get_abs_view_pos(); -- 2.39.5