using a texture for the grid is better
[vrfileman] / src / texture.h
diff --git a/src/texture.h b/src/texture.h
new file mode 100644 (file)
index 0000000..e39efe0
--- /dev/null
@@ -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_