X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Ftexture.h;h=154a8c030018f0087e062001ad851c8c8ae77758;hb=be92396630a2065e43c21d9d1904e97014844cff;hp=80012f46846a7bd11746ed182fc2a56a21c8dfc5;hpb=6065f6622cc275dc0b20baaf7c267e71169d18f3;p=libs%2Fgl.git diff --git a/source/core/texture.h b/source/core/texture.h index 80012f46..154a8c03 100644 --- a/source/core/texture.h +++ b/source/core/texture.h @@ -1,11 +1,12 @@ #ifndef MSP_GL_TEXTURE_H_ #define MSP_GL_TEXTURE_H_ +#include #include #include -#include "gl.h" #include "pixelformat.h" #include "resource.h" +#include "texture_backend.h" namespace Msp { namespace GL { @@ -19,8 +20,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 +31,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(); @@ -47,6 +50,19 @@ protected: void mipmap_levels(unsigned); }; +public: + class GenericLoader: public DataFile::DynamicObjectLoader + { + friend class Texture; + + public: + GenericLoader(Collection &c): DynamicObjectLoader(&c) { } + + protected: + virtual const TypeRegistry &get_type_registry() const { return get_texture_registry(); } + }; + +protected: enum FormatSwizzle { NO_SWIZZLE, @@ -55,34 +71,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); -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 +94,12 @@ 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 &); + using TextureBackend::set_debug_name; -protected: - void bind_scratch(); -public: - static void unbind_scratch(); +private: + static GenericLoader::TypeRegistry &get_texture_registry(); }; } // namespace GL