goat3dgfx
diff src/texture.h @ 24:dc5918c62a64
broken: converting to resman
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sat, 01 Mar 2014 22:04:29 +0200 |
parents | 7d6b667821cf |
children | 253542d715f4 |
line diff
1.1 --- a/src/texture.h Tue Feb 25 23:47:48 2014 +0200 1.2 +++ b/src/texture.h Sat Mar 01 22:04:29 2014 +0200 1.3 @@ -8,19 +8,32 @@ 1.4 1.5 class Image; 1.6 1.7 +enum TextureType { TEX_2D, TEX_CUBE }; 1.8 + 1.9 class Texture { 1.10 -protected: 1.11 +private: 1.12 unsigned int id; 1.13 unsigned int target; 1.14 unsigned int texfmt; 1.15 int sz[3]; 1.16 + Image *img; 1.17 1.18 Texture(const Texture &tex) {} 1.19 Texture &operator =(const Texture &tex) { return *this; } 1.20 1.21 + void set_image_2d(const Image &img); 1.22 + bool set_image_cube(const Image &img, int idx); 1.23 + bool set_image_cube(const Image &img); 1.24 + 1.25 + bool load_cube(const char *fname); 1.26 + 1.27 + /* for loading multiple cubemap faces from a single image */ 1.28 + bool set_cube_multi(const Image &img, const float *xoffsets, const float *yoffsets, float sz, 1.29 + unsigned int rotmask = 0); 1.30 + 1.31 public: 1.32 Texture(); 1.33 - virtual ~Texture(); 1.34 + ~Texture(); 1.35 1.36 void set_wrapping(unsigned int wrap); 1.37 void set_filtering(unsigned int filt); 1.38 @@ -28,53 +41,30 @@ 1.39 1.40 unsigned int get_format() const; 1.41 1.42 - virtual int get_size(int dim) const; 1.43 + int get_size(int dim) const; 1.44 1.45 - virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA) = 0; 1.46 - virtual void set_image(const Image &img, int idx = 0) = 0; 1.47 + void create(int xsz, int ysz, TextureType type = TEX_2D, unsigned int ifmt = GL_RGBA); 1.48 + void set_image(const Image &img, int idx = -1); 1.49 1.50 - virtual bool load(const char *fname) = 0; 1.51 - virtual bool save(const char *fname) const = 0; 1.52 + bool load(const char *fname); 1.53 1.54 - virtual unsigned int get_id() const; 1.55 + unsigned int get_id() const; 1.56 + TextureType get_type() const; 1.57 1.58 - virtual void bind(int tex_unit = 0) const; 1.59 + void bind(int tex_unit = 0) const; 1.60 + 1.61 + friend class TextureSet; 1.62 }; 1.63 1.64 -class Texture2D : public Texture { 1.65 -public: 1.66 - Texture2D(); 1.67 - 1.68 - virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA); 1.69 - virtual void set_image(const Image &img, int idx = 0); 1.70 - 1.71 - virtual bool load(const char *fname); 1.72 - virtual bool save(const char *fname) const; 1.73 -}; 1.74 - 1.75 -class TextureCube : public Texture { 1.76 -private: 1.77 - bool load_multi(const Image &img, const float *xoffsets, const float *yoffsets, float sz, 1.78 - unsigned int rotmask = 0); 1.79 - 1.80 -public: 1.81 - TextureCube(); 1.82 - 1.83 - virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA); 1.84 - virtual void set_image(const Image &img, int idx = 0); 1.85 - 1.86 - virtual bool load(const char *fname); 1.87 - virtual bool save(const char *fname) const; 1.88 -}; 1.89 - 1.90 -void set_texture(Texture *tex, int tunit = 0); 1.91 - 1.92 -/** loads a texture autodetecting whether it's a 2D texture or 1.93 - * cubemap and creating the correct Texture subclass instance. 1.94 - */ 1.95 -Texture *load_texture(const char *fname); 1.96 +void bind_texture(Texture *tex, int tunit = 0); 1.97 1.98 class TextureSet : public DataSet<Texture*> { 1.99 +private: 1.100 + static Texture *create_tex(); 1.101 + static bool load_tex(Texture *tex, const char *fname); 1.102 + static bool done_tex(Texture *tex); 1.103 + static void free_tex(Texture *tex); 1.104 + 1.105 public: 1.106 TextureSet(); 1.107 };