- Reworked Surface class and drawing stuff:
[supertux.git] / src / video / texture_manager.hpp
1 #ifndef __IMAGE_TEXTURE_MANAGER_HPP__
2 #define __IMAGE_TEXTURE_MANAGER_HPP__
3
4 #include <GL/gl.h>
5 #include <string>
6 #include <vector>
7 #include <map>
8 #include <set>
9
10 class Texture;
11 class ImageTexture;
12
13 class TextureManager
14 {
15 public:
16   TextureManager();
17   ~TextureManager();
18
19   ImageTexture* get(const std::string& filename);
20   
21   void register_texture(Texture* texture);
22   void remove_texture(Texture* texture);
23
24   void save_textures();
25   void reload_textures();
26
27 private:
28   friend class ImageTexture;
29   void release(ImageTexture* texture);
30   
31   typedef std::map<std::string, ImageTexture*> ImageTextures;
32   ImageTextures image_textures;
33
34   ImageTexture* create_image_texture(const std::string& filename);
35
36   typedef std::set<Texture*> Textures;
37   Textures textures;
38
39   struct SavedTexture
40   {
41     Texture* texture;
42     int width;
43     int height;
44     char* pixels;
45     int border;                              
46
47     int min_filter;
48     int mag_filter;
49     int wrap_s;
50     int wrap_t;
51   };
52   std::vector<SavedTexture> saved_textures;
53
54   void save_texture(Texture* texture);
55 };
56
57 extern TextureManager* texture_manager;
58
59 #endif
60