goat3dgfx
diff src/texture.h @ 0:1873dfd13f2d
initial commit
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Thu, 14 Nov 2013 05:27:09 +0200 |
parents | |
children | 3d96734fd477 |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/texture.h Thu Nov 14 05:27:09 2013 +0200 1.3 @@ -0,0 +1,76 @@ 1.4 +#ifndef TEXTURE_H_ 1.5 +#define TEXTURE_H_ 1.6 + 1.7 +#include "dataset.h" 1.8 +#include "opengl.h" 1.9 + 1.10 +class Image; 1.11 + 1.12 +class Texture { 1.13 +protected: 1.14 + unsigned int id; 1.15 + unsigned int target; 1.16 + unsigned int texfmt; 1.17 + int sz[3]; 1.18 + 1.19 + Texture(const Texture &tex) {} 1.20 + Texture &operator =(const Texture &tex) { return *this; } 1.21 + 1.22 +public: 1.23 + Texture(); 1.24 + virtual ~Texture(); 1.25 + 1.26 + void set_wrapping(unsigned int wrap); 1.27 + void set_filtering(unsigned int filt); 1.28 + void set_filtering(unsigned int min_filt, unsigned int mag_filt); 1.29 + 1.30 + unsigned int get_format() const; 1.31 + 1.32 + virtual int get_size(int dim) const; 1.33 + 1.34 + virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA) = 0; 1.35 + virtual void set_image(const Image &img, int idx = 0) = 0; 1.36 + 1.37 + virtual bool load(const char *fname) = 0; 1.38 + virtual bool save(const char *fname) const = 0; 1.39 + 1.40 + virtual unsigned int get_id() const; 1.41 + 1.42 + virtual void bind(int tex_unit = 0) const; 1.43 +}; 1.44 + 1.45 +class Texture2D : public Texture { 1.46 +public: 1.47 + Texture2D(); 1.48 + 1.49 + virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA); 1.50 + virtual void set_image(const Image &img, int idx = 0); 1.51 + 1.52 + virtual bool load(const char *fname); 1.53 + virtual bool save(const char *fname) const; 1.54 +}; 1.55 + 1.56 +class TextureCube : public Texture { 1.57 +public: 1.58 + TextureCube(); 1.59 + 1.60 + virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA); 1.61 + virtual void set_image(const Image &img, int idx = 0); 1.62 + 1.63 + virtual bool load(const char *fname); 1.64 + virtual bool save(const char *fname) const; 1.65 +}; 1.66 + 1.67 +void set_texture(Texture *tex, int tunit = 0); 1.68 + 1.69 +/** loads a texture autodetecting whether it's a 2D texture or 1.70 + * cubemap and creating the correct Texture subclass instance. 1.71 + */ 1.72 +Texture *load_texture(const char *fname); 1.73 + 1.74 +class TextureSet : public DataSet<Texture*> { 1.75 +public: 1.76 + TextureSet(); 1.77 +}; 1.78 + 1.79 +#endif // TEXTURE_H_