# Home    # nevrax.com   
Nevrax
Nevrax.org
#News
#Mailing-list
#Documentation
#CVS
#Bugs
#License
Docs
 
Documentation  
Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages   Search  

hls_texture_manager.cpp

Go to the documentation of this file.
00001 
00007 /* Copyright, 2000-2002 Nevrax Ltd.
00008  *
00009  * This file is part of NEVRAX NEL.
00010  * NEVRAX NEL is free software; you can redistribute it and/or modify
00011  * it under the terms of the GNU General Public License as published by
00012  * the Free Software Foundation; either version 2, or (at your option)
00013  * any later version.
00014 
00015  * NEVRAX NEL is distributed in the hope that it will be useful, but
00016  * WITHOUT ANY WARRANTY; without even the implied warranty of
00017  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00018  * General Public License for more details.
00019 
00020  * You should have received a copy of the GNU General Public License
00021  * along with NEVRAX NEL; see the file COPYING. If not, write to the
00022  * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
00023  * MA 02111-1307, USA.
00024  */
00025 
00026 #include "std3d.h"
00027 #include "3d/hls_texture_manager.h"
00028 #include "nel/misc/common.h"
00029 #include "nel/misc/algo.h"
00030 
00031 using namespace std;
00032 using namespace NLMISC;
00033 
00034 namespace NL3D {
00035 
00036 
00037 // ***************************************************************************
00038 CHLSTextureManager::CHLSTextureManager()
00039 {
00040 }
00041 
00042 // ***************************************************************************
00043 CHLSTextureManager::~CHLSTextureManager()
00044 {
00045         reset();
00046 }
00047 
00048 // ***************************************************************************
00049 void                    CHLSTextureManager::reset()
00050 {
00051         // delete instances.
00052         contReset(_Instances);
00053 
00054         // delete banks.
00055         for(uint i=0;i<_Banks.size();i++)
00056         {
00057                 delete _Banks[i];
00058         }
00059         contReset(_Banks);
00060 }
00061 
00062 // ***************************************************************************
00063 void                    CHLSTextureManager::addBank(CHLSTextureBank *bank)
00064 {
00065         // add the bank to the list
00066         _Banks.push_back(bank);
00067 
00068         // Add the bank instance list to the main.
00069         bank->fillHandleArray(_Instances);
00070 
00071         // then re-sort this array.
00072         sort(_Instances.begin(), _Instances.end());
00073 }
00074 
00075 
00076 // ***************************************************************************
00077 sint                    CHLSTextureManager::findTexture(const std::string &name) const
00078 {
00079         // empty?
00080         if(_Instances.empty())
00081                 return -1;
00082 
00083         // Build a valid key.
00084         string  nameLwr= strlwr(name);
00085         CHLSTextureBank::CTextureInstance               textKey;
00086         CHLSTextureBank::CTextureInstanceHandle textKeyHandle;
00087         textKey.buildAsKey(nameLwr.c_str());
00088         textKeyHandle.Texture= &textKey;
00089 
00090         // logN search it in the array
00091         uint    id= searchLowerBound(_Instances, textKeyHandle);
00092         // verify if really same name (index must exist since 0 if error, and not empty here)
00093         CHLSTextureBank::CTextureInstance               &textInst= *_Instances[id].Texture;
00094         if( textInst.sameName(nameLwr.c_str()) )
00095                 return id;
00096         else
00097                 return -1;
00098 }
00099 
00100 // ***************************************************************************
00101 bool                    CHLSTextureManager::buildTexture(sint textId, NLMISC::CBitmap &out) const
00102 {
00103         if(textId<0 || textId>=(sint)_Instances.size())
00104                 return false;
00105         else
00106         {
00107                 // Ok. build the bitmap
00108                 CHLSTextureBank::CTextureInstance               &textInst= *_Instances[textId].Texture;
00109                 textInst.buildColorVersion(out);
00110                 return true;
00111         }
00112 }
00113 
00114 
00115 // ***************************************************************************
00116 const char              *CHLSTextureManager::getTextureName(uint i) const
00117 {
00118         nlassert(i<_Instances.size());
00119         return _Instances[i].Texture->getName();
00120 }
00121 
00122 
00123 } // NL3D