]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/sampler.h
Remove default sampler from Texture
[libs/gl.git] / source / core / sampler.h
index 4208f069da4f4c6566c2fca362949ef20702d51b..bb02269f8c0ec9bcfd4408b3e48fa49702b90e06 100644 (file)
@@ -2,6 +2,7 @@
 #define MSP_GL_SAMPLER_H_
 
 #include <msp/datafile/objectloader.h>
+#include "color.h"
 #include "gl.h"
 #include "predicate.h"
 
@@ -38,6 +39,9 @@ enum TextureWrap
        /// Extend the texels at the edge of the texture to infinity
        CLAMP_TO_EDGE = GL_CLAMP_TO_EDGE,
 
+       /// Sampling outside the texture will return border color
+       CLAMP_TO_BORDER = GL_CLAMP_TO_BORDER,
+
        /// Tile the texture, with every other repetition mirrored
        MIRRORED_REPEAT = GL_MIRRORED_REPEAT
 };
@@ -69,6 +73,7 @@ public:
        private:
                void init();
 
+               void border_color(float, float, float, float);
                void compare(Predicate);
                void filter(TextureFilter);
                void mag_filter(TextureFilter);
@@ -89,30 +94,30 @@ private:
                WRAP_S = 8,
                WRAP_T = 16,
                WRAP_R = 32,
-               COMPARE = 64
+               BORDER_COLOR = 64,
+               COMPARE = 128
        };
 
        unsigned id;
-       const Texture *owner;
        TextureFilter min_filter;
        TextureFilter mag_filter;
        float max_anisotropy;
        TextureWrap wrap_s;
        TextureWrap wrap_t;
        TextureWrap wrap_r;
+       Color border_color;
        bool compare;
        Predicate cmp_func;
        mutable int dirty_params;
 
 public:
        Sampler();
-       Sampler(const Texture &);
-private:
-       void init();
 
+private:
        void update_parameter(int) const;
        void set_parameter_i(unsigned, int) const;
        void set_parameter_f(unsigned, float) const;
+       void set_parameter_fv(unsigned, const float *) const;
 
 public:
        void set_min_filter(TextureFilter);
@@ -135,6 +140,9 @@ public:
        void set_wrap_t(TextureWrap);
        void set_wrap_r(TextureWrap);
 
+       void set_border_color(const Color &);
+       const Color &get_border_color() const { return border_color; }
+
        /** Disables depth comparison. */
        void disable_compare();
 
@@ -154,7 +162,7 @@ public:
        static void unbind() { unbind_from(0); }
        static void unbind_from(unsigned);
 
-       void unload();
+       void set_debug_name(const std::string &);
 };