]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/sampler.h
Use friend declarations to access OpenGL IDs of objects
[libs/gl.git] / source / core / sampler.h
index f68f1a16183545c315a224017bd7b1ddd292adae..852c971003359bb7d0f0341dd97becef7242017d 100644 (file)
@@ -12,42 +12,40 @@ namespace GL {
 enum TextureFilter
 {
        /// No filtering
-       NEAREST = GL_NEAREST,
+       NEAREST,
 
        /// Bilinear filtering
-       LINEAR = GL_LINEAR,
+       LINEAR,
 
        /// Mipmapping without filtering
-       NEAREST_MIPMAP_NEAREST = GL_NEAREST_MIPMAP_NEAREST,
+       NEAREST_MIPMAP_NEAREST,
 
        /// Linear filtering between two mipmap levels
-       NEAREST_MIPMAP_LINEAR = GL_NEAREST_MIPMAP_LINEAR,
+       NEAREST_MIPMAP_LINEAR,
 
        /// Bilinear filtering on the closest mipmap level
-       LINEAR_MIPMAP_NEAREST = GL_LINEAR_MIPMAP_NEAREST,
+       LINEAR_MIPMAP_NEAREST,
 
        /// Trilinear filtering between two mipmap levels
-       LINEAR_MIPMAP_LINEAR = GL_LINEAR_MIPMAP_LINEAR
+       LINEAR_MIPMAP_LINEAR
 };
 
 
 enum TextureWrap
 {
        /// Tile the texture infinitely
-       REPEAT = GL_REPEAT,
+       REPEAT,
 
        /// Extend the texels at the edge of the texture to infinity
-       CLAMP_TO_EDGE = GL_CLAMP_TO_EDGE,
+       CLAMP_TO_EDGE,
 
        /// Sampling outside the texture will return border color
-       CLAMP_TO_BORDER = GL_CLAMP_TO_BORDER,
+       CLAMP_TO_BORDER,
 
        /// Tile the texture, with every other repetition mirrored
-       MIRRORED_REPEAT = GL_MIRRORED_REPEAT
+       MIRRORED_REPEAT
 };
 
-class Texture;
-
 
 /**
 Samplers are used to access texture data in shaders.  To use a sampler with a
@@ -65,6 +63,8 @@ wrapping is applied.  The default for all directions is REPEAT.
 */
 class Sampler
 {
+       friend class PipelineState;
+
 public:
        class Loader: public DataFile::ObjectLoader<Sampler>
        {
@@ -99,7 +99,6 @@ private:
        };
 
        unsigned id;
-       const Texture *owner;
        TextureFilter min_filter;
        TextureFilter mag_filter;
        float max_anisotropy;
@@ -113,14 +112,9 @@ private:
 
 public:
        Sampler();
-       Sampler(const Texture &);
-private:
-       void init();
 
-       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;
+private:
+       void update() const;
 
 public:
        void set_min_filter(TextureFilter);
@@ -158,20 +152,15 @@ public:
        bool is_compare_enabled() const { return compare; }
        Predicate get_compare_function() const { return cmp_func; }
 
-       void bind() const { bind_to(0); }
-       void bind_to(unsigned) const;
-
-       static const Sampler *current(unsigned = 0);
-       static void unbind() { unbind_from(0); }
-       static void unbind_from(unsigned);
-
-       void unload();
+       void refresh() const { if(dirty_params) update(); }
 
        void set_debug_name(const std::string &);
 };
 
 
 bool is_mipmapped(TextureFilter);
+GLenum get_gl_filter(TextureFilter);
+GLenum get_gl_wrap(TextureWrap);
 
 void operator>>(const LexicalConverter &, TextureFilter &);
 void operator>>(const LexicalConverter &, TextureWrap &);