diff --git a/src/AbstractTexture.cpp b/src/AbstractTexture.cpp index 95f9c087f..3135dd4ac 100644 --- a/src/AbstractTexture.cpp +++ b/src/AbstractTexture.cpp @@ -46,6 +46,12 @@ static_assert((filter_or(NearestNeighbor, BaseLevel) == GL_NEAREST) && #undef filter_or #endif +GLfloat AbstractTexture::maxSupportedAnisotropy() { + GLfloat value; + glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &value); + return value; +} + void AbstractTexture::setMinificationFilter(Filter filter, Mipmap mipmap) { CORRADE_ASSERT(_target != GL_TEXTURE_RECTANGLE || mipmap == Mipmap::BaseLevel, "AbstractTexture: rectangle textures cannot have mipmaps", ) diff --git a/src/AbstractTexture.h b/src/AbstractTexture.h index d0ae91bad..9569b8388 100644 --- a/src/AbstractTexture.h +++ b/src/AbstractTexture.h @@ -29,7 +29,6 @@ namespace Magnum { See Texture, CubeMapTexture and CubeMapTextureArray documentation for more information. @todo Add glPixelStore encapsulation -@todo Anisotropic filtering */ class MAGNUM_EXPORT AbstractTexture { AbstractTexture(const AbstractTexture& other) = delete; @@ -419,6 +418,14 @@ class MAGNUM_EXPORT AbstractTexture { /*@}*/ + /** + * @brief Max supported anisotropy + * + * @see setMaxAnisotropy() + * @requires_extension EXT_texture_filter_anisotropic + */ + static GLfloat maxSupportedAnisotropy(); + /** * @brief Constructor * @param layer %Texture layer (number between 0 and 31) @@ -498,6 +505,20 @@ class MAGNUM_EXPORT AbstractTexture { glTexParameterfv(_target, GL_TEXTURE_BORDER_COLOR, color.data()); } + /** + * @brief Set max anisotropy + * + * Default value is `1.0`, which means no anisotropy. Set to value + * greater than `1.0` for anisotropic filtering. + * + * @see maxSupportedAnisotropy() + * @requires_extension EXT_texture_filter_anisotropic + */ + inline void setMaxAnisotropy(GLfloat anisotropy) { + bind(); + glTexParameterf(_target, GL_TEXTURE_MAX_ANISOTROPY_EXT, anisotropy); + } + /** * @brief Generate mipmap *