]> git.tdb.fi Git - libs/gl.git/blobdiff - source/texture.h
Drop Id tags and copyright notices from files
[libs/gl.git] / source / texture.h
index 848517eb45c99da20a67c8261ed81488b7902ea3..71fa34076cb46028c3ac7b440096ea8f9c1b6535 100644 (file)
@@ -1,16 +1,10 @@
-/* $Id$
-
-This file is part of libmspgl
-Copyright © 2007  Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #ifndef MSP_GL_TEXTURE_H_
 #define MSP_GL_TEXTURE_H_
 
 #include <istream>
 #include <msp/datafile/objectloader.h>
 #include "gl.h"
+#include "predicate.h"
 
 namespace Msp {
 namespace GL {
@@ -28,6 +22,14 @@ enum TextureFilter
 std::istream &operator>>(std::istream &, TextureFilter &);
 
 
+enum TextureWrap
+{
+       REPEAT          = GL_REPEAT,
+       CLAMP_TO_EDGE   = GL_CLAMP_TO_EDGE,
+       MIRRORED_REPEAT = GL_MIRRORED_REPEAT
+};
+
+
 /**
 Base class for textures.  This class only defines operations common for all
 texture types and is not instantiable.  For specifying images for textures, see
@@ -40,33 +42,66 @@ protected:
        {
        public:
                Loader(Texture &);
-               void min_filter(TextureFilter);
-               void mag_filter(TextureFilter);
                void generate_mipmap(bool);
+               void mag_filter(TextureFilter);
+               void min_filter(TextureFilter);
+               void wrap(TextureWrap);
+               void wrap_r(TextureWrap);
+               void wrap_s(TextureWrap);
+               void wrap_t(TextureWrap);
+       };
+
+       enum ParameterMask
+       {
+               MIN_FILTER = 1,
+               MAG_FILTER = 2,
+               WRAP_S = 4,
+               WRAP_T = 8,
+               WRAP_R = 16,
+               GENERATE_MIPMAP = 32,
+               COMPARE = 64,
+               COMPARE_FUNC = 128
        };
 
+       unsigned id;
+       GLenum target;
+       TextureFilter min_filter;
+       TextureFilter mag_filter;
+       TextureWrap wrap_s;
+       TextureWrap wrap_t;
+       TextureWrap wrap_r;
+       bool gen_mipmap;
+       bool compare;
+       Predicate cmp_func;
+       mutable int dirty_params;
+
+       Texture(GLenum);
+       Texture(const Texture &);
+       Texture &operator=(const Texture &);
 public:
        ~Texture();
 
+protected:
+       void update_parameter(int) const;
+public:
+       void set_min_filter(TextureFilter);
+       void set_mag_filter(TextureFilter);
+       void set_wrap(TextureWrap);
+       void set_wrap_s(TextureWrap);
+       void set_wrap_t(TextureWrap);
+       void set_wrap_r(TextureWrap);
+       void set_generate_mipmap(bool);
+       void set_compare_enabled(bool);
+       void set_compare_func(Predicate);
+       GLenum get_target() const { return target; }
+       unsigned get_id() const { return id; }
+
        void bind() const;
        void bind_to(unsigned) const;
-       void parameter(GLenum, int);
-       void parameter(GLenum, float);
-       void set_min_filter(TextureFilter f) { parameter(GL_TEXTURE_MIN_FILTER, f); }
-       void set_mag_filter(TextureFilter f) { parameter(GL_TEXTURE_MAG_FILTER, f); }
-       GLenum get_target() const            { return target; }
-       unsigned  get_id() const                 { return id; }
 
+       static const Texture *current();
        static void unbind();
        static void unbind_from(unsigned);
-protected:
-       unsigned   id;
-       GLenum target;
-
-       Texture();
-       Texture(const Texture &);
-       Texture &operator=(const Texture &);
-       void maybe_bind() const;
 };
 
 } // namespace GL