]> git.tdb.fi Git - libs/gl.git/blobdiff - source/texture.h
Move filter heuristic for mipmap levels to Texture::Loader
[libs/gl.git] / source / texture.h
index bd000a325e520b7392a2afc404988879f7e3ecca..774b7e83610b17ea8ea1a861c23b41917ea256c1 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef MSP_GL_TEXTURE_H_
 #define MSP_GL_TEXTURE_H_
 
+#include <msp/core/attributes.h>
 #include <msp/datafile/objectloader.h>
 #include <msp/graphics/image.h>
 #include "datatype.h"
@@ -73,6 +74,7 @@ protected:
        class Loader: public DataFile::CollectionObjectLoader<Texture>
        {
        protected:
+               unsigned levels;
                bool srgb;
 
        public:
@@ -81,6 +83,8 @@ protected:
        private:
                void init();
 
+               unsigned get_levels() const;
+
                void external_image(const std::string &);
                void filter(TextureFilter);
                void generate_mipmap(bool);
@@ -105,8 +109,7 @@ protected:
                COMPARE = 64,
                COMPARE_FUNC = 128,
                MAX_ANISOTROPY = 256,
-               FORMAT_SWIZZLE = 512,
-               MIPMAP_LEVELS = 1024
+               FORMAT_SWIZZLE = 512
        };
 
        enum FormatSwizzle
@@ -122,7 +125,6 @@ protected:
        FormatSwizzle swizzle;
        TextureFilter min_filter;
        TextureFilter mag_filter;
-       unsigned mipmap_levels;
        float max_anisotropy;
        TextureWrap wrap_s;
        TextureWrap wrap_t;
@@ -156,7 +158,7 @@ public:
        is not applicable to magnification, LINEAR is used instead. */
        void set_filter(TextureFilter);
 
-       void set_mipmap_levels(unsigned);
+       DEPRECATED void set_mipmap_levels(unsigned) { }
 
        void set_max_anisotropy(float);
 
@@ -176,7 +178,7 @@ public:
        void set_auto_generate_mipmap(bool);
 
        /// Deprecated.  Use set_auto_generate_mipmap instead.
-       void set_generate_mipmap(bool g) { set_auto_generate_mipmap(g); }
+       DEPRECATED void set_generate_mipmap(bool g) { set_auto_generate_mipmap(g); }
 
        /** Sets depth texture comparison.  Has no effect on other formats.  When
        comparison is enabled, the third component of the texture coordinate is
@@ -190,13 +192,17 @@ public:
        /// Loads a Graphics::Image from a file and uploads it to the texture.
        virtual void load_image(const std::string &, bool srgb = false);
 
+       virtual void load_image(const std::string &, unsigned, bool srgb = false);
+
        /** Uploads an image to the texture.  If storage has not been defined, it
        will be set to match the image.  Otherwise the image must be compatible
        with the defined storage.  Semantics depend on the type of texture.
 
        If srgb is true and storage is determined by this call, then an sRGB pixel
        format will be used. */
-       virtual void image(const Graphics::Image &, bool srgb = false) = 0;
+       virtual void image(const Graphics::Image &, bool srgb = false);
+
+       virtual void image(const Graphics::Image &, unsigned, bool srgb = false) = 0;
 
        GLenum get_target() const { return target; }
        unsigned get_id() const { return id; }