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@33
|
20 static Image *default_img;
|
nuclear@0
|
21
|
nuclear@0
|
22 Texture(const Texture &tex) {}
|
nuclear@0
|
23 Texture &operator =(const Texture &tex) { return *this; }
|
nuclear@0
|
24
|
nuclear@24
|
25 void set_image_2d(const Image &img);
|
nuclear@24
|
26 bool set_image_cube(const Image &img, int idx);
|
nuclear@24
|
27 bool set_image_cube(const Image &img);
|
nuclear@24
|
28
|
nuclear@24
|
29 bool load_cube(const char *fname);
|
nuclear@24
|
30
|
nuclear@24
|
31 /* for loading multiple cubemap faces from a single image */
|
nuclear@24
|
32 bool set_cube_multi(const Image &img, const float *xoffsets, const float *yoffsets, float sz,
|
nuclear@24
|
33 unsigned int rotmask = 0);
|
nuclear@24
|
34
|
nuclear@0
|
35 public:
|
nuclear@0
|
36 Texture();
|
nuclear@24
|
37 ~Texture();
|
nuclear@0
|
38
|
nuclear@0
|
39 void set_wrapping(unsigned int wrap);
|
nuclear@0
|
40 void set_filtering(unsigned int filt);
|
nuclear@0
|
41 void set_filtering(unsigned int min_filt, unsigned int mag_filt);
|
nuclear@0
|
42
|
nuclear@0
|
43 unsigned int get_format() const;
|
nuclear@0
|
44
|
nuclear@24
|
45 int get_size(int dim) const;
|
nuclear@0
|
46
|
nuclear@24
|
47 void create(int xsz, int ysz, TextureType type = TEX_2D, unsigned int ifmt = GL_RGBA);
|
nuclear@33
|
48 void create_default(TextureType type = TEX_2D);
|
nuclear@24
|
49 void set_image(const Image &img, int idx = -1);
|
nuclear@0
|
50
|
nuclear@24
|
51 bool load(const char *fname);
|
nuclear@0
|
52
|
nuclear@24
|
53 unsigned int get_id() const;
|
nuclear@24
|
54 TextureType get_type() const;
|
nuclear@0
|
55
|
nuclear@24
|
56 void bind(int tex_unit = 0) const;
|
nuclear@24
|
57
|
nuclear@24
|
58 friend class TextureSet;
|
nuclear@0
|
59 };
|
nuclear@0
|
60
|
nuclear@24
|
61 void bind_texture(Texture *tex, int tunit = 0);
|
nuclear@0
|
62
|
nuclear@0
|
63 class TextureSet : public DataSet<Texture*> {
|
nuclear@24
|
64 private:
|
nuclear@24
|
65 static Texture *create_tex();
|
nuclear@24
|
66 static bool load_tex(Texture *tex, const char *fname);
|
nuclear@24
|
67 static bool done_tex(Texture *tex);
|
nuclear@24
|
68 static void free_tex(Texture *tex);
|
nuclear@24
|
69
|
nuclear@0
|
70 public:
|
nuclear@0
|
71 TextureSet();
|
nuclear@33
|
72
|
nuclear@33
|
73 Texture *get_texture(const char *name, TextureType type = TEX_2D) const;
|
nuclear@0
|
74 };
|
nuclear@0
|
75
|
nuclear@15
|
76 } // namespace goatgfx
|
nuclear@15
|
77
|
nuclear@0
|
78 #endif // TEXTURE_H_
|