// ============================================================== // This file is part of Glest Shared Library (www.glest.org) // // Copyright (C) 2001-2008 MartiƱo Figueroa // // You can redistribute this code and/or modify it under // the terms of the GNU General Public License as published // by the Free Software Foundation; either version 2 of the // License, or (at your option) any later version // ============================================================== #include "model_manager.h" #include "graphics_interface.h" #include "graphics_factory.h" #include #include #include "util.h" #include "platform_util.h" #include "leak_dumper.h" using namespace Shared::Util; using namespace Shared::Platform; namespace Shared{ namespace Graphics{ // ===================================================== // class ModelManager // ===================================================== ModelManager::ModelManager(){ if(GlobalStaticFlags::getIsNonGraphicalModeEnabled() == true) { throw megaglest_runtime_error("Loading graphics in headless server mode not allowed!"); } textureManager= NULL; } ModelManager::~ModelManager(){ end(); } Model *ModelManager::newModel(){ Model *model= GraphicsInterface::getInstance().getFactory()->newModel(); model->setTextureManager(textureManager); models.push_back(model); return model; } void ModelManager::init(){ for(size_t i=0; iinit(); } } } void ModelManager::end(){ for(size_t i=0; iend(); delete models[i]; models[i]=NULL; } } models.clear(); } void ModelManager::endModel(Model *model,bool mustExistInList) { if(model != NULL) { bool found = false; for(unsigned int idx = 0; idx < models.size(); idx++) { Model *curModel = models[idx]; if(curModel == model) { found = true; models.erase(models.begin() + idx); break; } } if(found == false && mustExistInList == true) { throw std::runtime_error("found == false in endModel"); } model->end(); delete model; } } void ModelManager::endLastModel(bool mustExistInList) { bool found = false; if(models.size() > 0) { found = true; size_t index = models.size()-1; Model *curModel = models[index]; models.erase(models.begin() + index); curModel->end(); delete curModel; } if(found == false && mustExistInList == true) { throw std::runtime_error("found == false in endLastModel"); } } }}//end namespace