]> git.mxchange.org Git - flightgear.git/blobdiff - src/Scenery/tileentry.cxx
Check for the plib version when using display lists, just to be sure.
[flightgear.git] / src / Scenery / tileentry.cxx
index 793694dcf8ef859c56308e7c151d88838f979e5c..108e6d0c831835dd0d15d0d7fc2d0997db2a08bc 100644 (file)
@@ -662,29 +662,24 @@ bool FGTileEntry::obj_load( const string& path,
 
 
 void
-FGTileEntry::load( const string &base_path, bool is_base )
+FGTileEntry::load( const string_list &path_list, bool is_base )
 {
-    SG_LOG( SG_TERRAIN, SG_INFO, "load() base search path = "
-            << base_path );
-
     bool found_tile_base = false;
 
-    string_list search = sgPathSplit( base_path );
-
     // obj_load() will generate ground lighting for us ...
     ssgVertexArray *light_pts = new ssgVertexArray( 100 );
 
     ssgBranch* new_tile = new ssgBranch;
 
     unsigned int i = 0;
-    while ( i < search.size() ) {
+    while ( i < path_list.size() ) {
 
         bool has_base = false;
 
         // Generate names for later use
         string index_str = tile_bucket.gen_index_str();
 
-        SGPath tile_path = search[i];
+        SGPath tile_path = path_list[i];
         tile_path.append( tile_bucket.gen_base_path() );
 
         SGPath basename = tile_path;
@@ -725,6 +720,9 @@ FGTileEntry::load( const string &base_path, bool is_base )
                                        geometry, NULL, NULL, NULL, light_pts,
                                        true ) )
                             {
+                                geometry->getKid( 0 )->setTravCallback( 
+                                                        SSG_CALLBACK_PRETRAV,
+                                                        &FGTileMgr::tile_filter_cb );
                                 new_tile -> addKid( geometry );
                             } else {
                                 delete geometry;
@@ -752,6 +750,9 @@ FGTileEntry::load( const string &base_path, bool is_base )
                                        taxi_lights, NULL, false ) )
                             {
                                 if ( geometry -> getNumKids() > 0 ) {
+                                    geometry->getKid( 0 )->setTravCallback(
+                                                                SSG_CALLBACK_PRETRAV,
+                                                                &FGTileMgr::tile_filter_cb );
                                     new_tile -> addKid( geometry );
                                 } else {
                                     delete geometry;
@@ -817,6 +818,7 @@ FGTileEntry::load( const string &base_path, bool is_base )
                     FGDeferredModel *dm
                         = new FGDeferredModel( custom_path.str(),
                                                tile_path.str(),
+                                               tile_bucket,
                                                this, obj_trans );
                     FGTileMgr::model_ready( dm );
 
@@ -912,7 +914,7 @@ FGTileEntry::load( const string &base_path, bool is_base )
         ssgBranch *geometry = new ssgBranch;
         Point3D c;
         double br;
-        if ( sgGenTile( search[0], tile_bucket, &c, &br,
+        if ( sgGenTile( path_list[0], tile_bucket, &c, &br,
                         globals->get_matlib(), geometry ) )
         {
             center = c;
@@ -980,6 +982,19 @@ FGTileEntry::load( const string &base_path, bool is_base )
     }
 }
 
+void
+FGTileEntry::makeDList( ssgBranch *b )
+{
+    int nb = b->getNumKids();
+    for (int i = 0; i<nb; i++) {
+        ssgEntity *e = b->getKid(i);
+        if (e->isAKindOf(ssgTypeLeaf())) {
+            ((ssgLeaf*)e)->makeDList();
+        } else if (e->isAKindOf(ssgTypeBranch())) {
+            makeDList( (ssgBranch*)e );
+        }
+    }
+}
 
 void
 FGTileEntry::add_ssg_nodes( ssgBranch *terrain_branch,
@@ -990,6 +1005,10 @@ FGTileEntry::add_ssg_nodes( ssgBranch *terrain_branch,
 {
     // bump up the ref count so we can remove this later without
     // having ssg try to free the memory.
+#if PLIB_VERSION > 183
+    makeDList( terra_transform );
+#endif
+
     terra_transform->ref();
     terrain_branch->addKid( terra_transform );