X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Ftexture.h;h=9c43b76911ecb5d00fcf517847f6a04001ed6241;hp=3e050db57f359cc0d3a9f514d828491c6a81cce0;hb=eacacdda1dc40bb655a3df14b59260ce06329fb6;hpb=d2efbd8a32efa2a3ee8542efc846277af19d63e0 diff --git a/source/texture.h b/source/texture.h index 3e050db5..9c43b769 100644 --- a/source/texture.h +++ b/source/texture.h @@ -81,6 +81,7 @@ protected: private: void init(); + void external_image(const std::string &); void filter(TextureFilter); void generate_mipmap(bool); void image_data(const std::string &); @@ -103,11 +104,21 @@ protected: GENERATE_MIPMAP = 32, COMPARE = 64, COMPARE_FUNC = 128, - MAX_ANISOTROPY = 256 + MAX_ANISOTROPY = 256, + FORMAT_SWIZZLE = 512 + }; + + enum FormatSwizzle + { + NO_SWIZZLE, + R_TO_LUMINANCE, + RG_TO_LUMINANCE_ALPHA }; unsigned id; GLenum target; + PixelFormat ifmt; + FormatSwizzle swizzle; TextureFilter min_filter; TextureFilter mag_filter; float max_anisotropy; @@ -119,6 +130,8 @@ protected: Predicate cmp_func; mutable int dirty_params; + static int swizzle_orders[]; + Texture(GLenum, ResourceManager * = 0); Texture(const Texture &); Texture &operator=(const Texture &); @@ -127,8 +140,12 @@ public: protected: static DataType get_alloc_type(PixelFormat); + void set_internal_format(PixelFormat); + PixelFormat get_upload_format(PixelFormat) const; void update_parameter(int) const; + void set_parameter_i(GLenum, int) const; + void set_parameter_f(GLenum, float) const; public: void set_min_filter(TextureFilter); void set_mag_filter(TextureFilter); @@ -146,6 +163,8 @@ public: void set_wrap_t(TextureWrap); void set_wrap_r(TextureWrap); + static bool can_generate_mipmap(); + /** Sets automatic mipmap generation. If enabled, mipmaps are generated when a texture image is uploaded. */ void set_generate_mipmap(bool); @@ -187,6 +206,9 @@ public: virtual UInt64 get_data_size() const { return 0; } }; + +bool is_mipmapped(TextureFilter); + } // namespace GL } // namespace Msp