00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
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
00052 contReset(_Instances);
00053
00054
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
00066 _Banks.push_back(bank);
00067
00068
00069 bank->fillHandleArray(_Instances);
00070
00071
00072 sort(_Instances.begin(), _Instances.end());
00073 }
00074
00075
00076
00077 sint CHLSTextureManager::findTexture(const std::string &name) const
00078 {
00079
00080 if(_Instances.empty())
00081 return -1;
00082
00083
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
00091 uint id= searchLowerBound(_Instances, textKeyHandle);
00092
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
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 }