00001 /* 00002 * ExNihilo 3D Engine 00003 * 00004 * This program is free software; you can redistribute it and/or modify 00005 * it under the terms of the GNU General Public License as published by 00006 * the Free Software Foundation; either version 2 of the License, or 00007 * (at your option) any later version. 00008 * 00009 * This program is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 * GNU Library General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU General Public License 00015 * along with this program; if not, write to the Free Software 00016 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00017 * 00018 * Please read AUTHORS file !!! 00019 * 00020 * $Id: ExManagerTexture.cpp,v 1.38 2002/12/08 17:57:06 data Exp $ 00021 * 00022 */ 00023 00024 #include "ExManagerTexture.h" 00025 00026 bool ExManagerTexture::m_flag = false; 00027 ExManagerTexture* ExManagerTexture::m_instance = NULL; 00028 00029 ExManagerTexture* ExManagerTexture::CreateSingleton(void){ 00030 Guard(ExManagerTexture* ExManagerTexture::CreateSingleton(void)) 00031 if(!m_flag) 00032 { 00033 m_flag = true; // We are creating the error log now, so set flag to true 00034 m_instance = new ExManagerTexture; // Create the error log 00035 }else 00036 { 00037 std::cout<<"Error singleton already created"<<std::endl; 00038 } 00039 return m_instance; 00040 UnGuard 00041 } 00042 00043 ExManagerTexture::ExManagerTexture(void) 00044 { 00045 Guard(ExManagerTexture::ExManagerTexture(void)) 00046 00047 UnGuard 00048 } 00049 00050 00051 ExManagerTexture::~ExManagerTexture(void) 00052 { 00053 Guard(ExManagerTexture::~ExManagerTexture(void)) 00054 UnGuard 00055 } 00056 00057 void ExManagerTexture::Init(void) 00058 { 00059 Guard(void ExManagerTexture::Init(void)) 00060 ExManagerObject<ExCTexture>::Init(); 00061 // Add("back.bmp"); 00062 UnGuard 00063 } 00064 00065 void ExManagerTexture::Reset(void) 00066 { 00067 Guard(void ExManagerTexture::Reset(void)) 00068 ExManagerObject<ExCTexture>::Reset(); 00069 UnGuard 00070 } 00071 00072 bool ExManagerTexture::Init(std::string FileName) 00073 { 00074 Guard(bool ExManagerTexture::Init(std::string FileName)) 00075 //openf file and load object 00076 00077 return true; 00078 UnGuard 00079 } 00080 00081 bool ExManagerTexture::CheckExist(std::string name) 00082 { 00083 Guard(ExManagerTexture::CheckExist(std::string name)) 00084 if(name.find(".")<name.length())//if extension remove them 00085 { 00086 name.erase(name.find("."),name.length()-name.find(".")); 00087 } 00088 if(ManagerId->GetObjectId(name,typeid(ExCTexture).name())==-1)return true; 00089 return false; 00090 UnGuard 00091 } 00092 00093 00094 bool ExManagerTexture::Load(std::string FileName) 00095 { 00096 Guard(ExManagerTexture::Load(std::string FileName)) 00097 if(FileName.find(".")<FileName.length())//if extension remove them 00098 { 00099 FileName.erase(FileName.find("."),FileName.length()-FileName.find(".")); 00100 } 00101 if(!CheckExist(FileName)){return true;} 00102 00103 try 00104 { 00105 return Add(ExCTexture(FileName)); 00106 }catch(ExCExpFileNotFound) 00107 { 00108 *Consol<<"Exception file not found texture not added"<<std::endl; 00109 return false; 00110 } 00111 catch(ExCExpNullPointer) 00112 { 00113 *Consol<<"Exception null pointer texture not added"<<std::endl; 00114 return false; 00115 } 00116 00117 UnGuard 00118 } 00119 00120 bool ExManagerTexture::Add(std::string FileName) 00121 { 00122 Guard(ExManagerTexture::Add(std::string FileName)) 00123 return Load(FileName); 00124 UnGuard 00125 } 00126 00127 bool ExManagerTexture::Add(ExCTexture object) 00128 { 00129 Guard(ExManagerTexture::Add(ExCTexture object)) 00130 if(!CheckExist(object.GetName())){return true;} 00131 return ExManagerObject<ExCTexture>::Add(object); 00132 UnGuard 00133 } 00134 00135 bool ExManagerTexture::SetCurrentObject(std::string Name) 00136 { 00137 Guard(ExManagerTexture::SetCurrentObject(std::string Name)) 00138 00139 if(Name.find(".")<Name.length())//if extension remove them 00140 { 00141 Name.erase(Name.find("."),Name.length()-Name.find(".")); 00142 } 00143 try 00144 { 00145 m_CurrentObjectId=ManagerId->GetObjectId(Name,typeid(ExCTexture).name()); 00146 glBindTexture(GL_TEXTURE_2D,GetObject(m_CurrentObjectId)->m_Texture); 00147 return true; 00148 //std::cout<<"ExManagerTexture ::"<<Name<<" Current object"<<std::endl; 00149 }catch(...) 00150 { 00151 if(!Load(Name)) 00152 { 00153 std::cout<<"ExManagerTexture ::Exception can make :"<<Name<<" Current object"<<std::endl; 00154 return true; 00155 } 00156 return false; 00157 } 00158 UnGuard 00159 } 00160 00161 bool ExManagerTexture::SetCurrentObject(ExNihilo::ExId id) 00162 { 00163 Guard(ExManagerTexture::SetCurrentObject(ExNihilo::ExId id)) 00164 if(GetObject(id)!=NULL) 00165 { 00166 m_CurrentObjectId=id; 00167 try 00168 { 00169 glBindTexture(GL_TEXTURE_2D,GetObject(m_CurrentObjectId)->m_Texture); 00170 return true; 00171 //std::cout<<"ExManagerTexture ::"<<Name<<" Current object"<<std::endl; 00172 }catch(...) 00173 { 00174 std::cout<<"ExManagerTexture ::Exception can make :"<<m_CurrentObjectId<<" Current object"<<std::endl; 00175 return false; 00176 } 00177 } 00178 return false; 00179 UnGuard 00180 } 00181 00182 GLint ExManagerTexture::GetTextureId(std::string Name) 00183 { 00184 Guard(ExManagerTexture::GetTextureId(std::string Name)) 00185 00186 if(Name.find(".")<Name.length())//if extension remove them 00187 { 00188 Name.erase(Name.find("."),Name.length()-Name.find(".")); 00189 } 00190 try 00191 { 00192 m_CurrentObjectId=ManagerId->GetObjectId(Name,typeid(ExCTexture).name()); 00193 return GetObject(m_CurrentObjectId)->m_Texture; 00194 //std::cout<<"ExManagerTexture ::"<<Name<<" Current object"<<std::endl; 00195 }catch(...) 00196 { 00197 if(!Load(Name)) 00198 { 00199 std::cout<<"ExManagerTexture ::Exception can make :"<<Name<<" Current object"<<std::endl; 00200 return -1; 00201 } 00202 return -1; 00203 } 00204 UnGuard 00205 } 00206 00207 GLint ExManagerTexture::GetTextureId(ExNihilo::ExId id) 00208 { 00209 Guard(ExManagerTexture::GetTextureId(ExNihilo::ExId id)) 00210 if(GetObject(id)!=NULL) 00211 { 00212 m_CurrentObjectId=id; 00213 try 00214 { 00215 return GetObject(m_CurrentObjectId)->m_Texture; 00216 //std::cout<<"ExManagerTexture ::"<<Name<<" Current object"<<std::endl; 00217 }catch(...) 00218 { 00219 std::cout<<"ExManagerTexture ::Exception can make :"<<m_CurrentObjectId<<" Current object"<<std::endl; 00220 return -1; 00221 } 00222 } 00223 return -1; 00224 UnGuard 00225 } 00226 00227 00228 ExCAction ExManagerTexture::InputAction(ExCAction Action) 00229 { 00230 Guard(ExCAction ExManagerTexture::InputAction(ExCAction Action)) 00231 switch(Action.m_Action) 00232 { 00233 case LIST_TEXTURE: 00234 List(); 00235 break; 00236 case LOAD_TEXTURE: 00237 break; 00238 case UNLOAD_TEXTURE: 00239 break; 00240 } 00241 if(Action.m_NextAction){return *Action.m_NextAction;} 00242 else{return NOTHING;} 00243 UnGuard 00244 } 00245