X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Ftexture.h;h=5566dccb8c9a111f55336b59d6aa7b68d08c0370;hb=47abe7c9e1633ca65f910a4db340724117a6f6e5;hp=af0844c55e26938f00b2201e2f10abd576ece537;hpb=8d6ed0b5fb02e2a2f9142e869fd705c36f57a225;p=libs%2Fgl.git diff --git a/source/texture.h b/source/texture.h index af0844c5..5566dccb 100644 --- a/source/texture.h +++ b/source/texture.h @@ -4,6 +4,7 @@ #include #include "gl.h" #include "predicate.h" +#include "resource.h" namespace Msp { namespace GL { @@ -63,14 +64,21 @@ texture to be usable. If texture coordinates fall outside of the principal range of the texture, wrapping is applied. The default for all directions is REPEAT. */ -class Texture +class Texture: public Resource { protected: - class Loader: public DataFile::ObjectLoader + class Loader: public DataFile::CollectionObjectLoader { + protected: + bool srgb; + public: Loader(Texture &); + Loader(Texture &, Collection &); private: + void init(); + + void filter(TextureFilter); void generate_mipmap(bool); void mag_filter(TextureFilter); void max_anisotropy(float); @@ -107,7 +115,7 @@ protected: Predicate cmp_func; mutable int dirty_params; - Texture(GLenum); + Texture(GLenum, ResourceManager * = 0); Texture(const Texture &); Texture &operator=(const Texture &); public: @@ -118,6 +126,11 @@ protected: public: void set_min_filter(TextureFilter); void set_mag_filter(TextureFilter); + + /** Sets filter for both minification and magnification. Since mipmapping + is not applicable to magnification, LINEAR is used instead. */ + void set_filter(TextureFilter); + void set_max_anisotropy(float); /** Sets the wrapping mode for all coordinates. */ @@ -143,11 +156,11 @@ public: GLenum get_target() const { return target; } unsigned get_id() const { return id; } - void bind() const; + void bind() const { bind_to(0); } void bind_to(unsigned) const; - static const Texture *current(); - static void unbind(); + static const Texture *current(unsigned = 0); + static void unbind() { unbind_from(0); } static void unbind_from(unsigned); };