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