using a texture for the grid is better
[vrfileman] / src / texture.h
1 #ifndef TEXTURE_H_
2 #define TEXTURE_H_
3
4 #include "opengl.h"
5
6 class Image;
7
8 enum TextureType {
9         TEXTURE_2D,
10         TEXTURE_CUBE
11 };
12
13 class Texture {
14 protected:
15         unsigned int id;
16         unsigned int target;
17         unsigned int texfmt;
18         int sz[3];
19
20         Texture(const Texture &tex) {}
21         Texture &operator =(const Texture &tex) {
22                 return *this;
23         }
24
25 public:
26         Texture();
27         virtual ~Texture();
28
29         virtual TextureType get_type() const = 0;
30
31         void set_wrapping(unsigned int wrap);
32         void set_filtering(unsigned int filt);
33         void set_filtering(unsigned int min_filt, unsigned int mag_filt);
34
35         unsigned int get_format() const;
36
37         virtual int get_size(int dim) const;
38
39         virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA) = 0;
40         virtual void set_image(const Image &img, int idx = 0) = 0;
41         virtual void get_image(Image *img, int idx = 0) const = 0;
42
43         virtual bool load(const char *fname) = 0;
44         virtual bool save(const char *fname) const = 0;
45
46         virtual unsigned int get_id() const;
47
48         virtual void bind(int tex_unit = 0) const;
49 };
50
51 class Texture2D : public Texture {
52 public:
53         Texture2D();
54
55         virtual TextureType get_type() const;
56
57         virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA);
58         virtual void set_image(const Image &img, int idx = 0);
59         virtual void get_image(Image *img, int idx = 0) const;
60
61         virtual void set_subimage(const Image &img, int xoffs, int yoffs);
62
63         virtual bool load(const char *fname);
64         virtual bool save(const char *fname) const;
65 };
66
67 class TextureCube : public Texture {
68 public:
69         TextureCube();
70
71         virtual TextureType get_type() const;
72
73         virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA);
74         virtual void set_image(const Image &img, int idx = 0);
75         virtual void get_image(Image *img, int idx = 0) const;
76
77         virtual bool load(const char *fname);
78         virtual bool save(const char *fname) const;
79 };
80
81 void bind_texture(Texture *tex, int tunit = 0);
82
83 /** loads a texture autodetecting whether it's a 2D texture or
84  * cubemap and creating the correct Texture subclass instance.
85  */
86 Texture *load_texture(const char *fname);
87
88 #endif  // TEXTURE_H_