X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ftexture.h;fp=src%2Ftexture.h;h=e39efe02b50a8ab8ec711c1eed68ac970f8516f0;hb=84320a4b92c1922cd40bd7ce3d942d19cc704bd2;hp=0000000000000000000000000000000000000000;hpb=dd39621d642e417f1e343cbf813205a658272639;p=vrfileman diff --git a/src/texture.h b/src/texture.h new file mode 100644 index 0000000..e39efe0 --- /dev/null +++ b/src/texture.h @@ -0,0 +1,88 @@ +#ifndef TEXTURE_H_ +#define TEXTURE_H_ + +#include "opengl.h" + +class Image; + +enum TextureType { + TEXTURE_2D, + TEXTURE_CUBE +}; + +class Texture { +protected: + unsigned int id; + unsigned int target; + unsigned int texfmt; + int sz[3]; + + Texture(const Texture &tex) {} + Texture &operator =(const Texture &tex) { + return *this; + } + +public: + Texture(); + virtual ~Texture(); + + virtual TextureType get_type() const = 0; + + void set_wrapping(unsigned int wrap); + void set_filtering(unsigned int filt); + void set_filtering(unsigned int min_filt, unsigned int mag_filt); + + unsigned int get_format() const; + + virtual int get_size(int dim) const; + + virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA) = 0; + virtual void set_image(const Image &img, int idx = 0) = 0; + virtual void get_image(Image *img, int idx = 0) const = 0; + + virtual bool load(const char *fname) = 0; + virtual bool save(const char *fname) const = 0; + + virtual unsigned int get_id() const; + + virtual void bind(int tex_unit = 0) const; +}; + +class Texture2D : public Texture { +public: + Texture2D(); + + virtual TextureType get_type() const; + + virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA); + virtual void set_image(const Image &img, int idx = 0); + virtual void get_image(Image *img, int idx = 0) const; + + virtual void set_subimage(const Image &img, int xoffs, int yoffs); + + virtual bool load(const char *fname); + virtual bool save(const char *fname) const; +}; + +class TextureCube : public Texture { +public: + TextureCube(); + + virtual TextureType get_type() const; + + virtual void create(int xsz, int ysz, unsigned int ifmt = GL_RGBA); + virtual void set_image(const Image &img, int idx = 0); + virtual void get_image(Image *img, int idx = 0) const; + + virtual bool load(const char *fname); + virtual bool save(const char *fname) const; +}; + +void bind_texture(Texture *tex, int tunit = 0); + +/** loads a texture autodetecting whether it's a 2D texture or + * cubemap and creating the correct Texture subclass instance. + */ +Texture *load_texture(const char *fname); + +#endif // TEXTURE_H_