fixed color linearity, and tweaked for VR
[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         void set_anisotropy(int aniso);
35
36         unsigned int get_format() const;
37
38         virtual int get_size(int dim) const;
39
40         virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA) = 0;
41         virtual void set_image(const Image &img, int idx = 0) = 0;
42         virtual void get_image(Image *img, int idx = 0) const = 0;
43
44         virtual bool load(const char *fname) = 0;
45         virtual bool save(const char *fname) const = 0;
46
47         virtual unsigned int get_id() const;
48
49         virtual void bind(int tex_unit = 0) const;
50 };
51
52 class Texture2D : public Texture {
53 public:
54         Texture2D();
55
56         virtual TextureType get_type() const;
57
58         virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA);
59         virtual void set_image(const Image &img, int idx = 0);
60         virtual void get_image(Image *img, int idx = 0) const;
61
62         virtual void set_subimage(const Image &img, int xoffs, int yoffs);
63
64         virtual bool load(const char *fname);
65         virtual bool save(const char *fname) const;
66 };
67
68 class TextureCube : public Texture {
69 public:
70         TextureCube();
71
72         virtual TextureType get_type() const;
73
74         virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA);
75         virtual void set_image(const Image &img, int idx = 0);
76         virtual void get_image(Image *img, int idx = 0) const;
77
78         virtual bool load(const char *fname);
79         virtual bool save(const char *fname) const;
80 };
81
82 void bind_texture(Texture *tex, int tunit = 0);
83
84 /** loads a texture autodetecting whether it's a 2D texture or
85  * cubemap and creating the correct Texture subclass instance.
86  */
87 Texture *load_texture(const char *fname);
88
89 #endif  // TEXTURE_H_