From: ThorstenB Date: Sun, 3 Apr 2011 16:56:09 +0000 (+0200) Subject: Enable OSG cache (default) and option to disable. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=83243f471a9ff4bf2aeab1e892b1f99a31ec1b6e;p=simgear.git Enable OSG cache (default) and option to disable. (also requires flightgear update) --- diff --git a/simgear/scene/model/SGPagedLOD.cxx b/simgear/scene/model/SGPagedLOD.cxx index f503544a..b44019b7 100644 --- a/simgear/scene/model/SGPagedLOD.cxx +++ b/simgear/scene/model/SGPagedLOD.cxx @@ -35,6 +35,8 @@ using namespace osg; using namespace simgear; +bool SGPagedLOD::_cache = true; + SGPagedLOD::SGPagedLOD() : PagedLOD() { @@ -53,6 +55,20 @@ SGPagedLOD::SGPagedLOD(const SGPagedLOD& plod,const CopyOp& copyop) { } +void +SGPagedLOD::setReaderWriterOptions(osgDB::ReaderWriter::Options *options) +{ + if (_cache) + options->setObjectCacheHint(osgDB::ReaderWriter::Options::CACHE_ALL); + else + options->setObjectCacheHint(osgDB::ReaderWriter::Options::CACHE_NONE); +#if SG_PAGEDLOD_HAS_OPTIONS + setDatabaseOptions(options); +#else + _readerWriterOptions = options; +#endif +} + bool SGPagedLOD::addChild(osg::Node *child) { if (!PagedLOD::addChild(child)) diff --git a/simgear/scene/model/SGPagedLOD.hxx b/simgear/scene/model/SGPagedLOD.hxx index 25a0e133..69f8dc21 100644 --- a/simgear/scene/model/SGPagedLOD.hxx +++ b/simgear/scene/model/SGPagedLOD.hxx @@ -52,14 +52,7 @@ public: // reimplemented to notify the loading through ModelData bool addChild(osg::Node *child); - void setReaderWriterOptions(osgDB::ReaderWriter::Options *options) { - options->setObjectCacheHint(osgDB::ReaderWriter::Options::CACHE_NONE); -#if SG_PAGEDLOD_HAS_OPTIONS - setDatabaseOptions(options); -#else - _readerWriterOptions = options; -#endif - } + void setReaderWriterOptions(osgDB::ReaderWriter::Options *options); osgDB::ReaderWriter::Options* getReaderWriterOptions() { #if SG_PAGEDLOD_HAS_OPTIONS @@ -69,11 +62,14 @@ public: #endif } + static void setRenderingCache(bool cache) {_cache = cache;} protected: virtual ~SGPagedLOD(); #if !SG_PAGEDLOD_HAS_OPTIONS osg::ref_ptr _readerWriterOptions; #endif +private: + static bool _cache; }; } #endif diff --git a/simgear/scene/model/modellib.cxx b/simgear/scene/model/modellib.cxx index 45c01430..886825f8 100644 --- a/simgear/scene/model/modellib.cxx +++ b/simgear/scene/model/modellib.cxx @@ -52,16 +52,13 @@ SGModelLib::panel_func SGModelLib::static_panelFunc = NULL; //////////////////////////////////////////////////////////////////////// // Implementation of SGModelLib. //////////////////////////////////////////////////////////////////////// -void SGModelLib::init(const string &root_dir) +void SGModelLib::init(const string &root_dir, SGPropertyNode* root) { osgDB::Registry::instance()->getDataFilePathList().push_front(root_dir); + static_propRoot = root; + SGPagedLOD::setRenderingCache(root->getBoolValue("/sim/rendering/cache",true)); } -void SGModelLib::setPropRoot(SGPropertyNode* root) -{ - static_propRoot = root; -} - void SGModelLib::setPanelFunc(panel_func pf) { static_panelFunc = pf; diff --git a/simgear/scene/model/modellib.hxx b/simgear/scene/model/modellib.hxx index 63358855..61091085 100644 --- a/simgear/scene/model/modellib.hxx +++ b/simgear/scene/model/modellib.hxx @@ -44,10 +44,8 @@ class SGModelLib public: typedef osg::Node *(*panel_func)(SGPropertyNode *); - static void init(const std::string &root_dir); + static void init(const std::string &root_dir, SGPropertyNode* root); - static void setPropRoot(SGPropertyNode* root); - static void setPanelFunc(panel_func pf); // Load a 3D model (any format)