// loader.cxx - implement SSG model and texture loaders. #ifdef HAVE_CONFIG_H # include #endif #include #include #include "loader.hxx" #include "model.hxx" //////////////////////////////////////////////////////////////////////// // Implementation of FGSSGLoader. //////////////////////////////////////////////////////////////////////// FGSSGLoader::FGSSGLoader () { // no op } FGSSGLoader::~FGSSGLoader () { std::map::iterator it = _table.begin(); while (it != _table.end()) { it->second->deRef(); _table.erase(it); } } void FGSSGLoader::flush () { std::map::iterator it = _table.begin(); while (it != _table.end()) { ssgBase * item = it->second; // If there is only one reference, it's // ours; no one else is using the item. if (item->getRef() == 1) { item->deRef(); _table.erase(it); } it++; } } //////////////////////////////////////////////////////////////////////// // Implementation of FGModelLoader. //////////////////////////////////////////////////////////////////////// FGModelLoader::FGModelLoader () { } FGModelLoader::~FGModelLoader () { } ssgEntity * FGModelLoader::load_model (const string &path) { // FIXME: normalize path to // avoid duplicates. std::map::iterator it = _table.find(path); if (it == _table.end()) { _table[path] = fgLoad3DModel((char *)path.c_str()); it = _table.find(path); it->second->ref(); // add one reference to keep it around } return (ssgEntity *)it->second; } //////////////////////////////////////////////////////////////////////// // Implementation of FGTextureLoader. //////////////////////////////////////////////////////////////////////// FGTextureLoader::FGTextureLoader () { } FGTextureLoader::~FGTextureLoader () { } ssgTexture * FGTextureLoader::load_texture (const string &path) { std::map::iterator it = _table.find(path); if (it == _table.end()) { _table[path] = new ssgTexture((char *)path.c_str()); // FIXME wrapu/v it = _table.find(path); it->second->ref(); // add one reference to keep it around } return (ssgTexture *)it->second; } // end of loader.cxx