goat3dgfx

annotate src/texture.h @ 33:253542d715f4

default texture
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 02 Mar 2014 06:32:37 +0200
parents dc5918c62a64
children
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_