X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fscene%2Ftgdb%2FTileEntry.cxx;h=92a6dab4ebe993f6d38bec48b5d01bd0f93c3978;hb=0d9b247da1f9322d51b190bea394e1348dee4af6;hp=47a72052c760819879c9284aeef08b7d540c7478;hpb=a2b75e0d7aed8b95335c5865d4fd40293c410c19;p=simgear.git diff --git a/simgear/scene/tgdb/TileEntry.cxx b/simgear/scene/tgdb/TileEntry.cxx index 47a72052..92a6dab4 100644 --- a/simgear/scene/tgdb/TileEntry.cxx +++ b/simgear/scene/tgdb/TileEntry.cxx @@ -130,17 +130,6 @@ 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::Options* options) -{ - osg::Node* node = osgDB::readNodeFile(path, options); - if (node) - geometry->addChild(node); - - return node != 0; -} - - typedef enum { OBJECT, OBJECT_SHARED, @@ -305,8 +294,10 @@ TileEntry::loadTileByFileName(const string& fileName, if (found_tile_base) { // load tile if found ... - obj_load( object_base.str(), new_tile, true, opt.get()); - + osg::ref_ptr node; + node = osgDB::readRefNodeFile(object_base.str(), opt.get()); + if (node.valid()) + new_tile->addChild(node); } else { // ... or generate an ocean tile on the fly SG_LOG(SG_TERRAIN, SG_INFO, " Generating ocean tile"); @@ -328,7 +319,10 @@ TileEntry::loadTileByFileName(const string& fileName, if (obj->type == OBJECT) { SGPath custom_path = obj->path; custom_path.append( obj->name ); - obj_load( custom_path.str(), new_tile, false, opt.get()); + osg::ref_ptr node; + node = osgDB::readRefNodeFile(custom_path.str(), opt.get()); + if (node.valid()) + new_tile->addChild(node); } else if (obj->type == OBJECT_SHARED || obj->type == OBJECT_STATIC) { // object loading is deferred to main render thread, @@ -341,34 +335,31 @@ TileEntry::loadTileByFileName(const string& fileName, } custom_path.append( obj->name ); - osg::Matrix obj_pos; - WorldCoordinate( obj_pos, obj->lat, obj->lon, obj->elev, obj->hdg ); - - osg::MatrixTransform *obj_trans = new osg::MatrixTransform; - obj_trans->setDataVariance(osg::Object::STATIC); - obj_trans->setMatrix( obj_pos ); - - // wire as much of the scene graph together as we can - new_tile->addChild( obj_trans ); - - osg::Node* model = 0; + osg::ref_ptr model; if(_modelLoader) model = _modelLoader->loadTileModel(custom_path.str(), obj->type == OBJECT_SHARED); - if (model) - obj_trans->addChild(model); + else + model = osgDB::readRefNodeFile(custom_path.str(), opt.get()); + + if (model.valid()) { + osg::Matrix obj_pos; + WorldCoordinate( obj_pos, obj->lat, obj->lon, obj->elev, obj->hdg ); + + osg::MatrixTransform *obj_trans = new osg::MatrixTransform; + obj_trans->setDataVariance(osg::Object::STATIC); + obj_trans->setMatrix( obj_pos ); + + // wire as much of the scene graph together as we can + new_tile->addChild( obj_trans ); + + obj_trans->addChild(model.get()); + } } else if (obj->type == OBJECT_SIGN || obj->type == OBJECT_RUNWAY_SIGN) { // load the object itself SGPath custom_path = obj->path; custom_path.append( obj->name ); - osg::Matrix obj_pos; - WorldCoordinate( obj_pos, obj->lat, obj->lon, obj->elev, obj->hdg ); - - osg::MatrixTransform *obj_trans = new osg::MatrixTransform; - obj_trans->setDataVariance(osg::Object::STATIC); - obj_trans->setMatrix( obj_pos ); - osg::Node *custom_obj = 0; if (obj->type == OBJECT_SIGN) custom_obj = SGMakeSign(opt->getMaterialLib(), custom_path.str(), obj->name); @@ -377,10 +368,17 @@ TileEntry::loadTileByFileName(const string& fileName, // wire the pieces together if ( custom_obj != NULL ) { - obj_trans -> addChild( custom_obj ); + osg::Matrix obj_pos; + WorldCoordinate( obj_pos, obj->lat, obj->lon, obj->elev, obj->hdg ); + + osg::MatrixTransform *obj_trans = new osg::MatrixTransform; + obj_trans->setDataVariance(osg::Object::STATIC); + obj_trans->setMatrix( obj_pos ); + + obj_trans->addChild( custom_obj ); + + new_tile->addChild( obj_trans ); } - new_tile->addChild( obj_trans ); - } delete obj; }