// ============================================================== // 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 "texture_manager.h" #include #include #include "graphics_interface.h" #include "graphics_factory.h" #include "util.h" #include "platform_util.h" #include "leak_dumper.h" using namespace Shared::Util; using namespace Shared::Platform; namespace Shared{ namespace Graphics{ // ===================================================== // class TextureManager // ===================================================== TextureManager::TextureManager() { if(GlobalStaticFlags::getIsNonGraphicalModeEnabled() == true) { throw megaglest_runtime_error("Loading graphics in headless server mode not allowed!"); } textureFilter= Texture::fBilinear; maxAnisotropy= 1; } TextureManager::~TextureManager(){ end(); } void TextureManager::initTexture(Texture *texture) { if(texture != NULL) { texture->init(textureFilter, maxAnisotropy); } } void TextureManager::endTexture(Texture *texture,bool mustExistInList) { if(texture != NULL) { bool found = false; for(unsigned int idx = 0; idx < textures.size(); idx++) { Texture *curTexture = textures[idx]; if(curTexture == texture) { found = true; textures.erase(textures.begin() + idx); break; } } if(found == false && mustExistInList == true) { throw std::runtime_error("found == false in endTexture"); } texture->end(); delete texture; } } void TextureManager::endLastTexture(bool mustExistInList) { bool found = false; if(textures.size() > 0) { found = true; int index = (int)textures.size()-1; Texture *curTexture = textures[index]; textures.erase(textures.begin() + index); curTexture->end(); delete curTexture; } if(found == false && mustExistInList == true) { throw std::runtime_error("found == false in endLastTexture"); } } void TextureManager::init(bool forceInit) { for(unsigned int i=0; ireseInitState(); } if(forceInit == true) { texture->end(false); } texture->init(textureFilter, maxAnisotropy); } } void TextureManager::end(){ for(unsigned int i=0; iend(); delete textures[i]; } } textures.clear(); } void TextureManager::setFilter(Texture::Filter textureFilter){ this->textureFilter= textureFilter; } void TextureManager::setMaxAnisotropy(int maxAnisotropy){ this->maxAnisotropy= maxAnisotropy; } Texture *TextureManager::getTexture(const string &path){ for(unsigned int i=0; igetPath()==path){ return textures[i]; } } return NULL; } Texture1D *TextureManager::newTexture1D(){ Texture1D *texture1D= GraphicsInterface::getInstance().getFactory()->newTexture1D(); textures.push_back(texture1D); return texture1D; } Texture2D *TextureManager::newTexture2D(){ Texture2D *texture2D= GraphicsInterface::getInstance().getFactory()->newTexture2D(); textures.push_back(texture2D); return texture2D; } Texture3D *TextureManager::newTexture3D(){ Texture3D *texture3D= GraphicsInterface::getInstance().getFactory()->newTexture3D(); textures.push_back(texture3D); return texture3D; } TextureCube *TextureManager::newTextureCube(){ TextureCube *textureCube= GraphicsInterface::getInstance().getFactory()->newTextureCube(); textures.push_back(textureCube); return textureCube; } }}//end namespace