]> git.mxchange.org Git - simgear.git/commitdiff
Cleanup.
authorfrohlich <frohlich>
Fri, 22 May 2009 18:20:11 +0000 (18:20 +0000)
committerTim Moore <timoore@redhat.com>
Tue, 2 Jun 2009 22:08:04 +0000 (00:08 +0200)
Additional null pointer checks.
Simplify redundant interface arguments.

Modified Files:
simgear/scene/material/mat.cxx simgear/scene/material/mat.hxx
simgear/scene/material/matlib.cxx
simgear/scene/material/matlib.hxx
simgear/scene/tgdb/ReaderWriterSTG.cxx
simgear/scene/tgdb/SGReaderWriterBTG.cxx
simgear/scene/tgdb/SGReaderWriterBTGOptions.hxx
simgear/scene/tgdb/TileEntry.cxx
simgear/scene/tgdb/TileEntry.hxx simgear/scene/tgdb/obj.cxx

simgear/scene/material/mat.cxx
simgear/scene/material/mat.hxx
simgear/scene/material/matlib.cxx
simgear/scene/material/matlib.hxx
simgear/scene/tgdb/ReaderWriterSTG.cxx
simgear/scene/tgdb/SGReaderWriterBTG.cxx
simgear/scene/tgdb/SGReaderWriterBTGOptions.hxx
simgear/scene/tgdb/TileEntry.cxx
simgear/scene/tgdb/TileEntry.hxx
simgear/scene/tgdb/obj.cxx

index 33162abe510d3cf03228bedd1ff339832cd67dd6..b306391bcd40262772ea17893f343fd533690a99 100644 (file)
@@ -57,10 +57,10 @@ using namespace simgear;
 ////////////////////////////////////////////////////////////////////////
 
 
-SGMaterial::SGMaterial( const string &fg_root, const SGPropertyNode *props, const char *season )
+SGMaterial::SGMaterial( const string &fg_root, const SGPropertyNode *props )
 {
     init();
-    read_properties( fg_root, props, season );
+    read_properties( fg_root, props );
     build_state( false );
 }
 
@@ -84,23 +84,20 @@ SGMaterial::~SGMaterial (void)
 {
 }
 
-
 \f
 ////////////////////////////////////////////////////////////////////////
 // Public methods.
 ////////////////////////////////////////////////////////////////////////
 
 void
-SGMaterial::read_properties( const string &fg_root, const SGPropertyNode * props, const char *season )
+SGMaterial::read_properties( const string &fg_root, const SGPropertyNode *props)
 {
                                // Gather the path(s) to the texture(s)
   vector<SGPropertyNode_ptr> textures = props->getChildren("texture");
   for (unsigned int i = 0; i < textures.size(); i++)
   {
     string tname = textures[i]->getStringValue();
-    string otname = tname;
-
-    if (tname == "") {
+    if (tname.empty()) {
         tname = "unknown.rgb";
     }
 
@@ -304,9 +301,8 @@ void SGMaterial::assignTexture( osg::StateSet *state, const std::string &fname,
    texture->setMaxAnisotropy( SGGetTextureFilter());
    state->setTextureAttributeAndModes(0, texture);
 
-   osg::TexEnv* texEnv = new osg::TexEnv;
-   texEnv->setMode(osg::TexEnv::MODULATE);
-   state->setTextureAttributeAndModes(0, texEnv);
+   StateAttributeFactory *attrFact = StateAttributeFactory::instance();
+   state->setTextureAttributeAndModes(0, attrFact->getStandardTexEnv());
 }
 
 SGMaterialGlyph* SGMaterial::get_glyph (const string& name) const
index 332197a1e378cd557a5a3b7e845ec27c0cbc6fcd..7b74d1ac66e60ce0a5a5636b9e129e4aa4f72890 100644 (file)
@@ -79,7 +79,7 @@ public:
    * state information for the material.  This node is usually
    * loaded from the $FG_ROOT/materials.xml file.
    */
-  SGMaterial( const string &fg_root, const SGPropertyNode *props, const char *season );
+  SGMaterial( const string &fg_root, const SGPropertyNode *props);
 
 
   /**
@@ -355,7 +355,7 @@ private:
 
   SGMaterial( const string &fg_root, const SGMaterial &mat ); // unimplemented
 
-  void read_properties( const string &fg_root, const SGPropertyNode *props, const char *season );
+  void read_properties( const string &fg_root, const SGPropertyNode *props );
   void build_state( bool defer_tex_load );
   void set_state( osg::StateSet *s );
 
index 484e0783b3ade1a220f3e1cf7e12ee9e06242dd8..63683d91975285e21283b1541e331268b29beebf 100644 (file)
@@ -67,7 +67,7 @@ SGMaterialLib::SGMaterialLib ( void ) {
 }
 
 // Load a library of material properties
-bool SGMaterialLib::load( const string &fg_root, const string& mpath, const char *season,
+bool SGMaterialLib::load( const string &fg_root, const string& mpath,
         SGPropertyNode *prop_root )
 {
     SGPropertyNode materials;
@@ -95,7 +95,7 @@ bool SGMaterialLib::load( const string &fg_root, const string& mpath, const char
                 }
             }
 
-            SGSharedPtr<SGMaterial> m = new SGMaterial(fg_root, node, season);
+            SGSharedPtr<SGMaterial> m = new SGMaterial(fg_root, node);
 
             vector<SGPropertyNode_ptr>names = node->getChildren("name");
             for ( unsigned int j = 0; j < names.size(); j++ ) {
index f1970985bcfba7a9899022da5c61ffc8107cca2f..6a873d506e820a195b3bfd218d574bd8b617b151 100644 (file)
@@ -66,7 +66,7 @@ public:
     SGMaterialLib ( void );
 
     // Load a library of material properties
-    bool load( const string &fg_root, const string& mpath, const char *season,
+    bool load( const string &fg_root, const string& mpath,
             SGPropertyNode *prop_root );
 
     // Add the named texture with default properties
index 57da979bf05babdcb26959c34b36bd4fb0585546..397aa3c56e8741efe36f43294952338cc97ff9d6 100644 (file)
@@ -57,6 +57,7 @@ ReaderWriterSTG::readNode(const std::string& fileName,
                           const osgDB::ReaderWriter::Options* options) const
 {
     std::string tileName = osgDB::getNameLessExtension(fileName);
+
     osg::Node* result = TileEntry::loadTileByName(tileName, options);
     // For debugging race conditions
 #ifdef SLOW_PAGER
index 90341f96e18d138ca27ec01961b9cf590e11f400..16602a5a0e4ca3929e75d10bab91f1494a2a745e 100644 (file)
 
 using namespace simgear;
 
-// SGReaderWriterBTGOptions static value here to avoid an additional,
-// tiny source file.
-
-std::string SGReaderWriterBTGOptions::defaultOptions;
-
 SGReaderWriterBTG::SGReaderWriterBTG()
 {
     supportsExtension("btg", "SimGear btg database format");
index 95892178714c6637078f05b49adfa98237b361b1..b1d21b5dde70c865a9615d9e9a427a709db46e50 100644 (file)
@@ -21,7 +21,7 @@
 #include <simgear/scene/tgdb/obj.hxx>
 class SGReaderWriterBTGOptions : public osgDB::ReaderWriter::Options {
 public:
-    SGReaderWriterBTGOptions(const std::string& str = defaultOptions) :
+    SGReaderWriterBTGOptions(const std::string& str = std::string()) :
         osgDB::ReaderWriter::Options(str),
         _matlib(0), _calcLights(true),
         _useRandomObjects(false),
@@ -57,6 +57,5 @@ protected:
     bool _calcLights;
     bool _useRandomObjects;
     bool _useRandomVegetation;
-    static std::string defaultOptions;
 };
 #endif
index 3442d39f55165b376476b07e8e9b7dde7fa45912..510fb9764292b14403cdb29d919ee9a26047fa23 100644 (file)
@@ -141,7 +141,6 @@ TileEntry::TileEntry ( const SGBucket& b )
     : tile_bucket( b ),
       _node( new osg::LOD ),
       is_inner_ring(false),
-      free_tracker(0),
       tileFileName(b.gen_index_str())
 {
     _node->setUpdateCallback(new FGTileUpdateCallback);
@@ -172,50 +171,16 @@ static void WorldCoordinate(osg::Matrix& obj_pos, double lat,
 }
 
 
-// Free "n" leaf elements of an ssg tree.  returns the number of
-// elements freed.  An empty branch node is considered a leaf.  This
-// is intended to spread the load of freeing a complex tile out over
-// several frames.
-static int fgPartialFreeSSGtree( osg::Group *b, int n ) {
-    int num_deletes = b->getNumChildren();
-
-    b->removeChildren(0, b->getNumChildren());
-
-    return num_deletes;
-}
-
-
 // Clean up the memory used by this tile and delete the arrays used by
 // ssg as well as the whole ssg branch
 bool TileEntry::free_tile() {
-    int delete_size = 100;
     SG_LOG( SG_TERRAIN, SG_DEBUG,
             "FREEING TILE = (" << tile_bucket << ")" );
 
-    SG_LOG( SG_TERRAIN, SG_DEBUG, "(start) free_tracker = " << free_tracker );
-
-    if ( !(free_tracker & NODES) ) {
-        free_tracker |= NODES;
-    } else if ( !(free_tracker & VEC_PTRS) ) {
-        free_tracker |= VEC_PTRS;
-    } else if ( !(free_tracker & TERRA_NODE) ) {
-        // delete the terrain branch (this should already have been
-        // disconnected from the scene graph)
-        SG_LOG( SG_TERRAIN, SG_DEBUG, "FREEING terra_transform" );
-        if ( fgPartialFreeSSGtree( _node.get(), delete_size ) == 0 ) {
-            _node = 0;
-            free_tracker |= TERRA_NODE;
-        }
-    } else if ( !(free_tracker & LIGHTMAPS) ) {
-        free_tracker |= LIGHTMAPS;
-    } else {
-        return true;
-    }
-
-    SG_LOG( SG_TERRAIN, SG_DEBUG, "(end) free_tracker = " << free_tracker );
+    _node->removeChildren(0, _node->getNumChildren());
+    _node = 0;
 
-    // if we fall down to here, we still have work todo, return false
-    return false;
+    return true;
 }
 
 
@@ -230,8 +195,8 @@ void TileEntry::prep_ssg_node(float vis) {
     _node->setRange( 0, 0, vis + bounding_radius );
 }
 
-bool TileEntry::obj_load( const string& path,
-                            osg::Group *geometry, bool is_base, const osgDB::ReaderWriter::Options*options)
+bool TileEntry::obj_load(const string& path, osg::Group *geometry, bool is_base,
+                         const osgDB::ReaderWriter::Options* options)
 {
     osg::Node* node = osgDB::readNodeFile(path, options);
     if (node)
@@ -386,7 +351,13 @@ TileEntry::loadTileByName(const string& index_str,
         }
     }
 
-    SGReaderWriterBTGOptions *opt = new SGReaderWriterBTGOptions(*dynamic_cast<const SGReaderWriterBTGOptions *>(options));
+    const SGReaderWriterBTGOptions* btgOpt;
+    btgOpt = dynamic_cast<const SGReaderWriterBTGOptions *>(options);
+    osg::ref_ptr<SGReaderWriterBTGOptions> opt;
+    if (btgOpt)
+        opt = new SGReaderWriterBTGOptions(*btgOpt);
+    else
+        opt = new SGReaderWriterBTGOptions;
 
     // obj_load() will generate ground lighting for us ...
     osg::Group* new_tile = new osg::Group;
@@ -394,7 +365,7 @@ TileEntry::loadTileByName(const string& index_str,
     if (found_tile_base) {
         // load tile if found ...
         opt->setCalcLights(true);
-        obj_load( object_base.str(), new_tile, true, options);
+        obj_load( object_base.str(), new_tile, true, opt);
 
     } else {
         // ... or generate an ocean tile on the fly
@@ -415,7 +386,7 @@ TileEntry::loadTileByName(const string& index_str,
             SGPath custom_path = obj->path;
             custom_path.append( obj->name );
             opt->setCalcLights(true);
-            obj_load( custom_path.str(), new_tile, false, options);
+            obj_load( custom_path.str(), new_tile, false, opt);
 
         } else if (obj->type == OBJECT_SHARED || obj->type == OBJECT_STATIC) {
             // object loading is deferred to main render thread,
index eee74541292c39c831a823202a4a70025a29d3a5..3cd9e39d651ed5b0b5ed40fd0e1d08a49034139e 100644 (file)
@@ -91,22 +91,6 @@ private:
      */
     bool is_inner_ring;
 
-    /**
-     * this variable tracks the status of the incremental memory
-     * freeing.
-     */
-    enum {
-        NODES = 0x01,
-        VEC_PTRS = 0x02,
-        TERRA_NODE = 0x04,
-        GROUND_LIGHTS = 0x08,
-        VASI_LIGHTS = 0x10,
-        RWY_LIGHTS = 0x20,
-        TAXI_LIGHTS = 0x40,
-        LIGHTMAPS = 0x80
-    };
-    int free_tracker;
-
     static ModelLoadHelper *_modelLoader;
 
 public:
index ebcb3167cc8a78acb643cbc9280c83e7f8b0c710..f366d75817f1f9877f26ce5cf31a067b7d2b2c48 100644 (file)
@@ -129,7 +129,9 @@ struct SGTileGeometryBin {
 
     for (unsigned grp = 0; grp < obj.get_pts_v().size(); ++grp) {
       std::string materialName = obj.get_pt_materials()[grp];
-      SGMaterial* material = matlib->find(materialName);
+      SGMaterial* material = 0;
+      if (matlib)
+          material = matlib->find(materialName);
       SGVec4f color = getMaterialLightColor(material);
 
       if (3 <= materialName.size() && materialName.substr(0, 3) != "RWY") {
@@ -369,7 +371,9 @@ struct SGTileGeometryBin {
     SGMaterialTriangleMap::const_iterator i;
     for (i = materialTriangleMap.begin(); i != materialTriangleMap.end(); ++i) {
       osg::Geometry* geometry = i->second.buildGeometry();
-      SGMaterial *mat = matlib->find(i->first);
+      SGMaterial *mat = 0;
+      if (matlib)
+        mat = matlib->find(i->first);
       if (mat)
         geometry->setStateSet(mat->get_state());
       geode->addDrawable(geometry);
@@ -584,7 +588,8 @@ SGLoadBTG(const std::string& path, SGMaterialLib *matlib, bool calc_lights, bool
 
   if (use_random_objects || use_random_vegetation) {
     if (use_random_objects) {
-      tileGeometryBin.computeRandomObjects(matlib);
+      if (matlib)
+        tileGeometryBin.computeRandomObjects(matlib);
     
       if (tileGeometryBin.randomModels.getNumModels() > 0) {
         // Generate a repeatable random seed
@@ -621,7 +626,7 @@ SGLoadBTG(const std::string& path, SGMaterialLib *matlib, bool calc_lights, bool
       }
     }
 
-    if (use_random_vegetation) {
+    if (use_random_vegetation && matlib) {
       // Now add some random forest.
       tileGeometryBin.computeRandomForest(matlib);
 
@@ -635,7 +640,8 @@ SGLoadBTG(const std::string& path, SGMaterialLib *matlib, bool calc_lights, bool
 
   if (calc_lights) {
     // FIXME: ugly, has a side effect
-    tileGeometryBin.computeRandomSurfaceLights(matlib);
+    if (matlib)
+      tileGeometryBin.computeRandomSurfaceLights(matlib);
 
     if (tileGeometryBin.tileLights.getNumLights() > 0
         || tileGeometryBin.randomTileLights.getNumLights() > 0) {
@@ -669,11 +675,15 @@ SGLoadBTG(const std::string& path, SGMaterialLib *matlib, bool calc_lights, bool
   if (!tileGeometryBin.vasiLights.empty()) {
     osg::Geode* vasiGeode = new osg::Geode;
     SGVec4f red(1, 0, 0, 1);
-    SGMaterial* mat = matlib->find("RWY_RED_LIGHTS");
+    SGMaterial* mat = 0;
+    if (matlib)
+      mat = matlib->find("RWY_RED_LIGHTS");
     if (mat)
       red = mat->get_light_color();
     SGVec4f white(1, 1, 1, 1);
-    mat = matlib->find("RWY_WHITE_LIGHTS");
+    mat = 0;
+    if (matlib)
+      mat = matlib->find("RWY_WHITE_LIGHTS");
     if (mat)
       white = mat->get_light_color();