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
*