goat3dgfx

view src/texture.h @ 16:f61cc1df533c

added viewscn example (under dev)
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 30 Nov 2013 20:53:26 +0200
parents 3d96734fd477
children dc5918c62a64
line source
1 #ifndef TEXTURE_H_
2 #define TEXTURE_H_
4 #include "dataset.h"
5 #include "opengl.h"
7 namespace goatgfx {
9 class Image;
11 class Texture {
12 protected:
13 unsigned int id;
14 unsigned int target;
15 unsigned int texfmt;
16 int sz[3];
18 Texture(const Texture &tex) {}
19 Texture &operator =(const Texture &tex) { return *this; }
21 public:
22 Texture();
23 virtual ~Texture();
25 void set_wrapping(unsigned int wrap);
26 void set_filtering(unsigned int filt);
27 void set_filtering(unsigned int min_filt, unsigned int mag_filt);
29 unsigned int get_format() const;
31 virtual int get_size(int dim) const;
33 virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA) = 0;
34 virtual void set_image(const Image &img, int idx = 0) = 0;
36 virtual bool load(const char *fname) = 0;
37 virtual bool save(const char *fname) const = 0;
39 virtual unsigned int get_id() const;
41 virtual void bind(int tex_unit = 0) const;
42 };
44 class Texture2D : public Texture {
45 public:
46 Texture2D();
48 virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA);
49 virtual void set_image(const Image &img, int idx = 0);
51 virtual bool load(const char *fname);
52 virtual bool save(const char *fname) const;
53 };
55 class TextureCube : public Texture {
56 private:
57 bool load_multi(const Image &img, const float *xoffsets, const float *yoffsets, float sz,
58 unsigned int rotmask = 0);
60 public:
61 TextureCube();
63 virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA);
64 virtual void set_image(const Image &img, int idx = 0);
66 virtual bool load(const char *fname);
67 virtual bool save(const char *fname) const;
68 };
70 void set_texture(Texture *tex, int tunit = 0);
72 /** loads a texture autodetecting whether it's a 2D texture or
73 * cubemap and creating the correct Texture subclass instance.
74 */
75 Texture *load_texture(const char *fname);
77 class TextureSet : public DataSet<Texture*> {
78 public:
79 TextureSet();
80 };
82 } // namespace goatgfx
84 #endif // TEXTURE_H_