]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/sampler.h
Check the flat qualifier from the correct member
[libs/gl.git] / source / core / sampler.h
index bd8db31fdc8f9601f5ac2ac55e9762cead38fef4..c9f8ec963bd462ea3bf978a3990b0ee481d55986 100644 (file)
@@ -48,18 +48,12 @@ enum TextureWrap
 
 
 /**
-Samplers are used to access texture data in shaders.  To use a sampler with a
-texture, bind it to the same texture unit.  Each texture has a default sampler
-which is used if no external sampler is bound.
-
-A texture is generally rendered at a size that's either smaller or larger than
-its native size, so that the texture coordinates do not exactly correspond to
-the texels of the texture.  The kind of filtering used, if any, is determined
-by the minification and magnification filter parameters.  The default is LINEAR
-for magnification and NEAREST_MIPMAP_LINEAR for minification.
-
-If texture coordinates fall outside of the principal range of the texture,
-wrapping is applied.  The default for all directions is REPEAT.
+Stores settings affecting how values are obtained from textures in a shader.
+Samplers are always used together with textures.
+
+Texture coordinates are first transformed according to the wrap mode for each
+axis.  One or more texel values are then read and combined according to the
+filtering mode.
 */
 class Sampler: public SamplerBackend
 {
@@ -98,25 +92,26 @@ private:
                COMPARE = 128
        };
 
-       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();
+       TextureFilter min_filter = NEAREST_MIPMAP_LINEAR;
+       TextureFilter mag_filter = LINEAR;
+       float max_anisotropy = 1.0f;
+       TextureWrap wrap_s = REPEAT;
+       TextureWrap wrap_t = REPEAT;
+       TextureWrap wrap_r = REPEAT;
+       Color border_color = { 0.0f, 0.0f, 0.0f, 0.0f };
+       bool compare = false;
+       Predicate cmp_func = LEQUAL;
+       mutable int dirty_params = 0;
 
-private:
        void update() const;
 
 public:
+       /** Sets filter to use when the texture is drawn at a size smaller than
+       original. */
        void set_min_filter(TextureFilter);
+
+       /** Sets filter to use when the texture is drawn at a size larger than
+       original.  Mipmapped filters can't be used. */
        void set_mag_filter(TextureFilter);
 
        /** Sets filter for both minification and magnification.  If a mipmapping
@@ -126,17 +121,23 @@ public:
        TextureFilter get_min_filter() const { return min_filter; }
        TextureFilter get_mag_filter() const { return mag_filter; }
 
+       /** Sets the maximum aspect ratio for anisotropic filtering.  If greater
+       than 1, filtering will consider more than than four samples when the texture
+       is drawn at an oblique angle. */
        void set_max_anisotropy(float);
-       float get_max_anisotropy() const { return max_anisotropy; }
 
-       /** Sets the wrapping mode for all coordinates. */
-       void set_wrap(TextureWrap);
+       float get_max_anisotropy() const { return max_anisotropy; }
 
        void set_wrap_s(TextureWrap);
        void set_wrap_t(TextureWrap);
        void set_wrap_r(TextureWrap);
 
+       /** Sets the wrapping mode for all coordinates. */
+       void set_wrap(TextureWrap);
+
+       /** Sets the border color for CLAMP_TO_BORDER wrap mode. */
        void set_border_color(const Color &);
+
        const Color &get_border_color() const { return border_color; }
 
        /** Disables depth comparison. */
@@ -144,7 +145,7 @@ public:
 
        /** Enables depth comparison and sets the compare function.  Only has an
        effect when used with a depth texture.  When depth comparison is enabled,
-       the third component of the texture coordinate is compared against the texel
+       the last component of the texture coordinate is compared against the texel
        value, and the result is returned as the texture sample.*/
        void set_compare(Predicate);