X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Ftexture.h;h=2f647b90cae721837f441a59c4c67e5c5f3f31fd;hb=f19366d32cc29287a2730cfba90893e407754081;hp=80012f46846a7bd11746ed182fc2a56a21c8dfc5;hpb=6065f6622cc275dc0b20baaf7c267e71169d18f3;p=libs%2Fgl.git diff --git a/source/core/texture.h b/source/core/texture.h index 80012f46..2f647b90 100644 --- a/source/core/texture.h +++ b/source/core/texture.h @@ -3,9 +3,9 @@ #include #include -#include "gl.h" #include "pixelformat.h" #include "resource.h" +#include "texture_backend.h" namespace Msp { namespace GL { @@ -19,8 +19,10 @@ A texture can consinst of a stack of images, called a mipmap. The dimensions of each mipmap level are half that of the previous level. The mipmap stack can be used for texture minification; see the Sampler class for details. */ -class Texture: public Resource +class Texture: public TextureBackend, public Resource { + friend TextureBackend; + protected: class Loader: public DataFile::CollectionObjectLoader { @@ -28,10 +30,10 @@ protected: unsigned levels; public: - Loader(Texture &); - Loader(Texture &, Collection &); + Loader(Texture &t): Loader(t, 0) { } + Loader(Texture &t, Collection &c): Loader(t, &c) { } private: - void init(); + Loader(Texture &, Collection *); virtual void finish(); @@ -55,34 +57,20 @@ protected: RGB_TO_BGR }; - unsigned id; - GLenum target; PixelFormat format; PixelFormat storage_fmt; FormatSwizzle swizzle; bool use_srgb_format; bool auto_gen_mipmap; - std::string debug_name; - - static int swizzle_orders[]; - static Texture *scratch_binding; - Texture(GLenum, ResourceManager * = 0); - Texture(const Texture &); - Texture &operator=(const Texture &); -public: - ~Texture(); + Texture(unsigned, ResourceManager * = 0); -protected: - void generate_id(); void set_format(PixelFormat); - void apply_swizzle(); - void set_parameter_i(GLenum, int) const; public: PixelFormat get_format() const { return format; } - void generate_mipmap(); + using TextureBackend::generate_mipmap; /// Loads a Graphics::Image from a file and uploads it to the texture. virtual void load_image(const std::string &, unsigned = 0); @@ -92,17 +80,9 @@ public: with the defined storage. Semantics depend on the type of texture. */ virtual void image(const Graphics::Image &, unsigned = 0) = 0; - GLenum get_target() const { return target; } - unsigned get_id() const { return id; } - virtual std::uint64_t get_data_size() const { return 0; } - void set_debug_name(const std::string &); - -protected: - void bind_scratch(); -public: - static void unbind_scratch(); + using TextureBackend::set_debug_name; }; } // namespace GL