]> git.mxchange.org Git - flightgear.git/commitdiff
Removed extra square array of indirection indices between what's visible
authorcurt <curt>
Sun, 8 Aug 1999 15:23:39 +0000 (15:23 +0000)
committercurt <curt>
Sun, 8 Aug 1999 15:23:39 +0000 (15:23 +0000)
and where these things are in the cache.  We just let ssg sort out what needs
to be drawn based on visual range.

src/Scenery/tilecache.cxx
src/Scenery/tilecache.hxx
src/Scenery/tilemgr.cxx
src/Scenery/tilemgr.hxx

index f60bad41bece96f0e61084dcb2a2bc10e7efb549..20f5d821f71947cf869a179502df8a623ed38959 100644 (file)
@@ -2,7 +2,7 @@
 //
 // Written by Curtis Olson, started January 1998.
 //
-// Copyright (C) 1997  Curtis L. Olson  - curt@infoplane.com
+// Copyright (C) 1998, 1999  Curtis L. Olson  - curt@flightgear.org
 //
 // This program is free software; you can redistribute it and/or
 // modify it under the terms of the GNU General Public License as
index c3692c2602f7e51337c324d831f3f97e2763e9a7..789c0db125e1220955cb1eb72899fdc4224599d7 100644 (file)
@@ -2,7 +2,7 @@
 //
 // Written by Curtis Olson, started January 1998.
 //
-// Copyright (C) 1997  Curtis L. Olson  - curt@infoplane.com
+// Copyright (C) 1998, 1999  Curtis L. Olson  - curt@flightgear.org
 //
 // This program is free software; you can redistribute it and/or
 // modify it under the terms of the GNU General Public License as
@@ -82,6 +82,9 @@ public:
        return &tile_cache[index];
     }
 
+    // Return the cache size
+    inline size_t get_size() const { return tile_cache.size(); }
+
     // Destructor
     ~FGTileCache( void );
 };
index 4c12d9620b9b76a3d7b0f47140f7ef6a550339c1..3de6ebce4baa2412e6a4fb9178f1394f8d305b43 100644 (file)
@@ -445,7 +445,7 @@ int FGTileMgr::update( void ) {
        p2 = fgBucketOffset( f->get_Longitude() * RAD_TO_DEG,
                             f->get_Latitude() * RAD_TO_DEG,
                             0, 0 );
-       tiles[(dh*tile_diameter) + dw] = sched_tile( p2 );
+       sched_tile( p2 );
 
        for ( i = 3; i <= tile_diameter; i = i + 2 ) {
            int span = i / 2;
@@ -455,7 +455,7 @@ int FGTileMgr::update( void ) {
                p2 = fgBucketOffset( f->get_Longitude() * RAD_TO_DEG,
                                     f->get_Latitude() * RAD_TO_DEG,
                                     j, -span );
-               tiles[((dh-span)*tile_diameter) + dw+j] = sched_tile( p2 );
+               sched_tile( p2 );
            }
 
            // top row
@@ -463,7 +463,7 @@ int FGTileMgr::update( void ) {
                p2 = fgBucketOffset( f->get_Longitude() * RAD_TO_DEG,
                                     f->get_Latitude() * RAD_TO_DEG,
                                     j, span );
-               tiles[((dh+span)*tile_diameter) + dw+j] = sched_tile( p2 );
+               sched_tile( p2 );
            }
 
            // middle rows
@@ -471,11 +471,11 @@ int FGTileMgr::update( void ) {
                p2 = fgBucketOffset( f->get_Longitude() * RAD_TO_DEG,
                                     f->get_Latitude() * RAD_TO_DEG,
                                     -span, j );
-               tiles[((dh+j)*tile_diameter) + dw-span] = sched_tile( p2 );
+               sched_tile( p2 );
                p2 = fgBucketOffset( f->get_Longitude() * RAD_TO_DEG,
                                     f->get_Latitude() * RAD_TO_DEG,
                                     span, j );
-               tiles[((dh+j)*tile_diameter) + dw+span] = sched_tile( p2 );
+               sched_tile( p2 );
            }
 
        }
@@ -486,7 +486,7 @@ int FGTileMgr::update( void ) {
                p2 = fgBucketOffset( f->get_Longitude() * RAD_TO_DEG,
                                     f->get_Latitude() * RAD_TO_DEG,
                                     i - dw, j -dh );
-               tiles[(j*tile_diameter) + i] = sched_tile( p2 );
+               sched_tile( p2 );
            }
        } */
 
@@ -526,19 +526,15 @@ int FGTileMgr::update( void ) {
        FG_LOG( FG_TERRAIN, FG_INFO, "Updating Tile list for " << p1 );
 
        if ( (p1.get_lon() > p_last.get_lon()) ||
-            ( (p1.get_lon() == p_last.get_lon()) && (p1.get_x() > p_last.get_x()) ) ) {
+            ( (p1.get_lon() == p_last.get_lon()) && 
+              (p1.get_x() > p_last.get_x()) ) ) {
            FG_LOG( FG_TERRAIN, FG_INFO, 
                    "  (East) Loading " << tile_diameter << " tiles" );
            for ( j = 0; j < tile_diameter; j++ ) {
                // scrolling East
-               disable_tile( tiles[(j*tile_diameter) + 0] );
-               for ( i = 0; i < tile_diameter - 1; i++ ) {
-                   tiles[(j*tile_diameter) + i] = 
-                       tiles[(j*tile_diameter) + i + 1];
-               }
-               // load in new column
+               // schedule new column
                p2 = fgBucketOffset( last_lon, last_lat, dw + 1, j - dh );
-               tiles[(j*tile_diameter) + tile_diameter - 1] = sched_tile( p2 );
+               sched_tile( p2 );
            }
        } else if ( (p1.get_lon() < p_last.get_lon()) ||
                    ( (p1.get_lon() == p_last.get_lon()) && 
@@ -547,47 +543,33 @@ int FGTileMgr::update( void ) {
                    "  (West) Loading " << tile_diameter << " tiles" );
            for ( j = 0; j < tile_diameter; j++ ) {
                // scrolling West
-               disable_tile( tiles[(j*tile_diameter) + tile_diameter - 1] );
-               for ( i = tile_diameter - 1; i > 0; i-- ) {
-                   tiles[(j*tile_diameter) + i] = 
-                       tiles[(j*tile_diameter) + i - 1];
-               }
-               // load in new column
+               // schedule new column
                p2 = fgBucketOffset( last_lon, last_lat, -dw - 1, j - dh );
-               tiles[(j*tile_diameter) + 0] = sched_tile( p2 );
+               sched_tile( p2 );
            }
        }
 
        if ( (p1.get_lat() > p_last.get_lat()) ||
-            ( (p1.get_lat() == p_last.get_lat()) && (p1.get_y() > p_last.get_y()) ) ) {
+            ( (p1.get_lat() == p_last.get_lat()) && 
+              (p1.get_y() > p_last.get_y()) ) ) {
            FG_LOG( FG_TERRAIN, FG_INFO, 
                    "  (North) Loading " << tile_diameter << " tiles" );
            for ( i = 0; i < tile_diameter; i++ ) {
                // scrolling North
-               disable_tile( tiles[0 + i] );
-               for ( j = 0; j < tile_diameter - 1; j++ ) {
-                   tiles[(j * tile_diameter) + i] =
-                       tiles[((j+1) * tile_diameter) + i];
-               }
-               // load in new column
+               // schedule new row
                p2 = fgBucketOffset( last_lon, last_lat, i - dw, dh + 1);
-               tiles[((tile_diameter-1) * tile_diameter) + i] = 
-                   sched_tile( p2 );
+               sched_tile( p2 );
            }
        } else if ( (p1.get_lat() < p_last.get_lat()) ||
-                   ( (p1.get_lat() == p_last.get_lat()) && (p1.get_y() < p_last.get_y()) ) ) {
+                   ( (p1.get_lat() == p_last.get_lat()) && 
+                     (p1.get_y() < p_last.get_y()) ) ) {
            FG_LOG( FG_TERRAIN, FG_INFO, 
                    "  (South) Loading " << tile_diameter << " tiles" );
            for ( i = 0; i < tile_diameter; i++ ) {
                // scrolling South
-               disable_tile( tiles[((tile_diameter-1) * tile_diameter) + i] );
-               for ( j = tile_diameter - 1; j > 0; j-- ) {
-                   tiles[(j * tile_diameter) + i] = 
-                       tiles[((j-1) * tile_diameter) + i];
-               }
-               // load in new column
+               // schedule new row
                p2 = fgBucketOffset( last_lon, last_lat, i - dw, -dh - 1);
-               tiles[0 + i] = sched_tile( p2 );
+               sched_tile( p2 );
            }
        }
     }
@@ -695,16 +677,13 @@ update_tile_geometry( FGTileEntry *t, GLdouble *MODEL_VIEW)
 void FGTileMgr::prep_ssg_nodes( void ) {
     FGTileEntry *t;
 
-    int tile_diameter = current_options.get_tile_diameter();
-
     float ranges[2];
     ranges[0] = 0.0f;
 
     // traverse the potentially viewable tile list and update range
     // selector and transform
-    for ( int i = 0; i < (tile_diameter * tile_diameter); i++ ) {
-       int index = tiles[i];
-       t = global_tile_cache.get_tile(index);
+    for ( int i = 0; i < (int)global_tile_cache.get_size(); i++ ) {
+       t = global_tile_cache.get_tile( i );
 
        if ( t->is_loaded() ) {
            // set range selector (LOD trick) to be distance to center
index 13b54409e2eea2f7a31a6c99f31289f561518a0c..3c6de251a4f6227be177f7309c4be00ba6c97039 100644 (file)
@@ -63,10 +63,6 @@ class FGTileMgr {
 
 private:
 
-    // closest (potentially viewable) tiles, centered on current tile.
-    // This is an array of pointers to cache indexes.
-    int tiles[FG_LOCAL_X_Y];
-
     // Tile loading state
     enum load_state {
        Start = 0,