rev |
line source |
nuclear@0
|
1 #ifndef TEXTURE_H_
|
nuclear@0
|
2 #define TEXTURE_H_
|
nuclear@0
|
3
|
nuclear@0
|
4 #include "dataset.h"
|
nuclear@0
|
5 #include "opengl.h"
|
nuclear@0
|
6
|
nuclear@15
|
7 namespace goatgfx {
|
nuclear@15
|
8
|
nuclear@0
|
9 class Image;
|
nuclear@0
|
10
|
nuclear@24
|
11 enum TextureType { TEX_2D, TEX_CUBE };
|
nuclear@24
|
12
|
nuclear@0
|
13 class Texture {
|
nuclear@24
|
14 private:
|
nuclear@0
|
15 unsigned int id;
|
nuclear@0
|
16 unsigned int target;
|
nuclear@0
|
17 unsigned int texfmt;
|
nuclear@0
|
18 int sz[3];
|
nuclear@24
|
19 Image *img;
|
nuclear@0
|
20
|
nuclear@0
|
21 Texture(const Texture &tex) {}
|
nuclear@0
|
22 Texture &operator =(const Texture &tex) { return *this; }
|
nuclear@0
|
23
|
nuclear@24
|
24 void set_image_2d(const Image &img);
|
nuclear@24
|
25 bool set_image_cube(const Image &img, int idx);
|
nuclear@24
|
26 bool set_image_cube(const Image &img);
|
nuclear@24
|
27
|
nuclear@24
|
28 bool load_cube(const char *fname);
|
nuclear@24
|
29
|
nuclear@24
|
30 /* for loading multiple cubemap faces from a single image */
|
nuclear@24
|
31 bool set_cube_multi(const Image &img, const float *xoffsets, const float *yoffsets, float sz,
|
nuclear@24
|
32 unsigned int rotmask = 0);
|
nuclear@24
|
33
|
nuclear@0
|
34 public:
|
nuclear@0
|
35 Texture();
|
nuclear@24
|
36 ~Texture();
|
nuclear@0
|
37
|
nuclear@0
|
38 void set_wrapping(unsigned int wrap);
|
nuclear@0
|
39 void set_filtering(unsigned int filt);
|
nuclear@0
|
40 void set_filtering(unsigned int min_filt, unsigned int mag_filt);
|
nuclear@0
|
41
|
nuclear@0
|
42 unsigned int get_format() const;
|
nuclear@0
|
43
|
nuclear@24
|
44 int get_size(int dim) const;
|
nuclear@0
|
45
|
nuclear@24
|
46 void create(int xsz, int ysz, TextureType type = TEX_2D, unsigned int ifmt = GL_RGBA);
|
nuclear@24
|
47 void set_image(const Image &img, int idx = -1);
|
nuclear@0
|
48
|
nuclear@24
|
49 bool load(const char *fname);
|
nuclear@0
|
50
|
nuclear@24
|
51 unsigned int get_id() const;
|
nuclear@24
|
52 TextureType get_type() const;
|
nuclear@0
|
53
|
nuclear@24
|
54 void bind(int tex_unit = 0) const;
|
nuclear@24
|
55
|
nuclear@24
|
56 friend class TextureSet;
|
nuclear@0
|
57 };
|
nuclear@0
|
58
|
nuclear@24
|
59 void bind_texture(Texture *tex, int tunit = 0);
|
nuclear@0
|
60
|
nuclear@0
|
61 class TextureSet : public DataSet<Texture*> {
|
nuclear@24
|
62 private:
|
nuclear@24
|
63 static Texture *create_tex();
|
nuclear@24
|
64 static bool load_tex(Texture *tex, const char *fname);
|
nuclear@24
|
65 static bool done_tex(Texture *tex);
|
nuclear@24
|
66 static void free_tex(Texture *tex);
|
nuclear@24
|
67
|
nuclear@0
|
68 public:
|
nuclear@0
|
69 TextureSet();
|
nuclear@0
|
70 };
|
nuclear@0
|
71
|
nuclear@15
|
72 } // namespace goatgfx
|
nuclear@15
|
73
|
nuclear@0
|
74 #endif // TEXTURE_H_
|