X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Ftexture.h;h=154a8c030018f0087e062001ad851c8c8ae77758;hb=be92396630a2065e43c21d9d1904e97014844cff;hp=6d474b8864ec392375041e47821ca29016d66006;hpb=2e09b4f72f06537431151fe8b2574e1aa886ad48;p=libs%2Fgl.git diff --git a/source/core/texture.h b/source/core/texture.h index 6d474b88..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,10 +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 class Framebuffer; - friend class PipelineState; + friend TextureBackend; + protected: class Loader: public DataFile::CollectionObjectLoader { @@ -30,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(); @@ -49,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, @@ -57,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 const 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); @@ -96,12 +96,10 @@ public: 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