nuclear@0: #ifndef TEXTURE_H_ nuclear@0: #define TEXTURE_H_ nuclear@0: nuclear@0: #include "dataset.h" nuclear@0: #include "opengl.h" nuclear@0: nuclear@0: class Image; nuclear@0: nuclear@0: class Texture { nuclear@0: protected: nuclear@0: unsigned int id; nuclear@0: unsigned int target; nuclear@0: unsigned int texfmt; nuclear@0: int sz[3]; nuclear@0: nuclear@0: Texture(const Texture &tex) {} nuclear@0: Texture &operator =(const Texture &tex) { return *this; } nuclear@0: nuclear@0: public: nuclear@0: Texture(); nuclear@0: virtual ~Texture(); nuclear@0: nuclear@0: void set_wrapping(unsigned int wrap); nuclear@0: void set_filtering(unsigned int filt); nuclear@0: void set_filtering(unsigned int min_filt, unsigned int mag_filt); nuclear@0: nuclear@0: unsigned int get_format() const; nuclear@0: nuclear@0: virtual int get_size(int dim) const; nuclear@0: nuclear@0: virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA) = 0; nuclear@0: virtual void set_image(const Image &img, int idx = 0) = 0; nuclear@0: nuclear@0: virtual bool load(const char *fname) = 0; nuclear@0: virtual bool save(const char *fname) const = 0; nuclear@0: nuclear@0: virtual unsigned int get_id() const; nuclear@0: nuclear@0: virtual void bind(int tex_unit = 0) const; nuclear@0: }; nuclear@0: nuclear@0: class Texture2D : public Texture { nuclear@0: public: nuclear@0: Texture2D(); nuclear@0: nuclear@0: virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA); nuclear@0: virtual void set_image(const Image &img, int idx = 0); nuclear@0: nuclear@0: virtual bool load(const char *fname); nuclear@0: virtual bool save(const char *fname) const; nuclear@0: }; nuclear@0: nuclear@0: class TextureCube : public Texture { nuclear@0: public: nuclear@0: TextureCube(); nuclear@0: nuclear@0: virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA); nuclear@0: virtual void set_image(const Image &img, int idx = 0); nuclear@0: nuclear@0: virtual bool load(const char *fname); nuclear@0: virtual bool save(const char *fname) const; nuclear@0: }; nuclear@0: nuclear@0: void set_texture(Texture *tex, int tunit = 0); nuclear@0: nuclear@0: /** loads a texture autodetecting whether it's a 2D texture or nuclear@0: * cubemap and creating the correct Texture subclass instance. nuclear@0: */ nuclear@0: Texture *load_texture(const char *fname); nuclear@0: nuclear@0: class TextureSet : public DataSet { nuclear@0: public: nuclear@0: TextureSet(); nuclear@0: }; nuclear@0: nuclear@0: #endif // TEXTURE_H_