X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fscene%2Fmodel%2Fmodellib.hxx;h=cdd6d820440a50f6c337d0c04f79f4b45b42b5fe;hb=32a6bd78d8bf143f40922f1a0bc7a88ea7706a7d;hp=bfc5c4889852320615a30b93a2647bbc4ffe6fb6;hpb=764a3c29e94b0d5e8e910586deb3dfcc8c7a4036;p=simgear.git diff --git a/simgear/scene/model/modellib.hxx b/simgear/scene/model/modellib.hxx index bfc5c488..cdd6d820 100644 --- a/simgear/scene/model/modellib.hxx +++ b/simgear/scene/model/modellib.hxx @@ -32,6 +32,10 @@ #include #include +namespace osg { + class PagedLOD; +} + namespace simgear { class SGModelData; // defined below @@ -44,16 +48,12 @@ class SGModelLib public: typedef osg::Node *(*panel_func)(SGPropertyNode *); - typedef SGPath (*resolve_func)(const std::string& path); - - 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 resetPropertyRoot(); static void setPanelFunc(panel_func pf); - static void setResolveFunc(resolve_func rf); - // Load a 3D model (any format) // data->modelLoaded() will be called after the model is loaded static osg::Node* loadModel(const std::string &path, @@ -61,16 +61,24 @@ public: SGModelData *data=0, bool load2DPanels=false); // Load a 3D model (any format) through the DatabasePager. - // Most models should be loaded using this function! - // This function will initially return an SGPagedLOD node. - // data->modelLoaded() will be called after the model is loaded and - // connected to the scene graph. See AIModelData on how to use this. - // NOTE: AIModelData uses observer_ptr to avoid circular references. - static osg::Node* loadPagedModel(const std::string &path, + // This function initially just returns a proxy node that refers to + // the model file. Once the viewer steps onto that node the + // model will be loaded. + static osg::Node* loadDeferredModel(const std::string &path, + SGPropertyNode *prop_root = NULL, + SGModelData *data=0); + // Load a 3D model (any format) through the DatabasePager. + // This function initially just returns a PagedLOD node that refers to + // the model file. Once the viewer steps onto that node the + // model will be loaded. When the viewer does no longer reference this + // node for a long time the node is unloaded again. + static osg::PagedLOD* loadPagedModel(const std::string &path, SGPropertyNode *prop_root = NULL, SGModelData *data=0); - static std::string findDataFile(const std::string& file, const osgDB::ReaderWriter::Options* opts = NULL); + static std::string findDataFile(const std::string& file, + const osgDB::Options* opts = NULL, + SGPath currentDir = SGPath()); protected: SGModelLib(); ~SGModelLib (); @@ -78,7 +86,6 @@ protected: private: static SGPropertyNode_ptr static_propRoot; static panel_func static_panelFunc; - static resolve_func static_resolver; }; @@ -92,6 +99,7 @@ public: virtual ~SGModelData() {} virtual void modelLoaded(const std::string& path, SGPropertyNode *prop, osg::Node* branch) = 0; + virtual SGModelData* clone() const = 0; }; }