00001 #ifndef __TEXTUREMANAGER__H__ 00002 #define __TEXTUREMANAGER__H__ 00003 00004 #include <string> 00005 #include <map> 00006 00007 #include "../Util/Singleton.h" 00008 00009 class TextureManager : public Singleton<TextureManager> 00010 { 00011 friend class Singleton<TextureManager>; 00012 00013 public: 00014 enum FilterMethod 00015 { 00016 FILTER_NONE = 0, 00017 FILTER_NEAREST, 00018 FILTER_LINEAR 00019 }; 00020 TextureManager(void); 00021 ~TextureManager(void); 00022 00024 unsigned int LoadTexture(const char* filename, bool mipMaps=true, bool compressed=true, bool isSkyBoxTexture=false); 00025 00027 unsigned int LoadCubeMap(const char* filename[6], bool mipMaps); 00028 00030 void ReleaseTexture(const unsigned int& idx); 00031 00033 void DeleteAllTextures(void); 00034 00036 unsigned int GetTextureSize(const unsigned int& idx); 00037 00039 unsigned int GetTotalTextureSize(void); 00040 00042 void ChangeFilterMethod(const FilterMethod& method); 00043 00045 void ChangeMipMapMethod(const FilterMethod& method); 00046 00048 const FilterMethod GetFilterMethod(void) const { return (FilterMethod)filterMethod; } 00049 00051 const FilterMethod GetMipMapMethod(void) const { return (FilterMethod)mipMapMethod; } 00052 00053 private: 00054 struct TextureReference { 00055 unsigned int idx; 00056 unsigned int ref; 00057 unsigned int size; 00058 unsigned int numMipMaps; 00059 00060 TextureReference(unsigned id_, unsigned sz, unsigned mm) : idx(id_), ref(1), size(sz), numMipMaps(mm) {} 00061 TextureReference() : idx(0), ref(0), size(0), numMipMaps(0) {} 00062 TextureReference(const TextureReference& tr) : idx(tr.idx), ref(tr.ref), size(tr.size), numMipMaps(tr.numMipMaps) {} 00063 }; 00064 00066 unsigned int CreateTexture(const unsigned int& Format, unsigned char** pixels, const unsigned int& width, const unsigned int& height, const unsigned int& numMipMaps, const bool& compressed, const bool& isSkyBoxTexture); 00067 00068 unsigned int CreateCubeMap(unsigned char** pixels[6], const unsigned int& width, const unsigned int& height, const unsigned int& numMipMaps); 00069 00071 std::map<std::string, TextureReference> textures; 00072 std::map<std::string, TextureReference>::iterator iter; 00073 00075 unsigned int filterMethod; 00076 00078 unsigned int mipMapMethod; 00079 }; 00080 00081 #endif