]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/texture.h
Check the flat qualifier from the correct member
[libs/gl.git] / source / core / texture.h
index ff56e85cb233d97ff5b822c5360255b7c9e2a8bc..96b17b8910752e0f0f46f7466b2acf7d014e2746 100644 (file)
@@ -49,10 +49,12 @@ protected:
                void load_external_image(Graphics::Image &, const std::string &);
 
        private:
+               void external_data(const std::string &);
                void external_image(bool, const std::string &);
                void generate_mipmap(bool);
                void image_data(const std::string &);
                void mipmap_levels(unsigned);
+               void raw_data(const std::string &);
        };
 
 public:
@@ -68,29 +70,30 @@ public:
        };
 
 protected:
-       enum FormatSwizzle
-       {
-               NO_SWIZZLE,
-               R_TO_LUMINANCE,
-               RG_TO_LUMINANCE_ALPHA,
-               RGB_TO_BGR
-       };
-
-       PixelFormat format;
-       PixelFormat storage_fmt;
-       FormatSwizzle swizzle;
-       bool use_srgb_format;
-       bool auto_gen_mipmap;
+       PixelFormat format = NO_PIXELFORMAT;
+       PixelFormat storage_fmt = NO_PIXELFORMAT;
+       ComponentSwizzle swizzle = NO_SWIZZLE;
+       unsigned n_levels = 0;
+       bool use_srgb_format = false;
+       bool auto_gen_mipmap = false;
 
        Texture(unsigned);
 
        void set_format(PixelFormat);
+       static unsigned count_levels(unsigned);
+
+       void stage_pixels(void *, const void *, std::size_t);
 
 public:
        PixelFormat get_format() const { return format; }
 
        using TextureBackend::generate_mipmap;
 
+       /** Replaces contents of an entire mipmap level.  Allocated storage must
+       exist.  The image data is interpreted according to the storage format and
+       must have size matching the selected mipmap level. */
+       virtual void image(unsigned level, const void *) = 0;
+
        /** Loads an image into the texture from a file. */
        virtual void load_image(const std::string &, unsigned = 0);