From 172c60a9000533cb9f310e28f1d602b66878ad4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Tue, 8 May 2012 01:20:02 +0200 Subject: [PATCH] Support for anisotropic filtering. --- src/AbstractTexture.cpp | 6 ++++++ src/AbstractTexture.h | 23 ++++++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) 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 *