Simplify setting texture filters & add anisotropic filtering

This commit is contained in:
Nikita Lisitsa 2020-09-10 11:03:25 +03:00
parent 8a37d29b5e
commit d7e0599556
2 changed files with 31 additions and 1 deletions

View file

@ -103,6 +103,9 @@ namespace psemek::gfx
}
void generate_mipmap();
void nearest_filter();
void linear_filter();
void anisotropy();
private:
GLuint id_;

View file

@ -1,4 +1,5 @@
#include <psemek/gfx/texture.hpp>
#include <optional>
namespace psemek::gfx
{
@ -56,7 +57,6 @@ namespace psemek::gfx
{
bind();
gl::TexImage2D(gl::TEXTURE_2D, 0, internal_format, width, height, 0, format, type, data);
gl::GenerateMipmap(gl::TEXTURE_2D);
width_ = width;
height_ = height;
@ -81,4 +81,31 @@ namespace psemek::gfx
gl::GenerateMipmap(gl::TEXTURE_2D);
}
void texture_2d::nearest_filter()
{
bind();
gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_MAG_FILTER, gl::NEAREST);
gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_MIN_FILTER, gl::LINEAR_MIPMAP_LINEAR);
}
void texture_2d::linear_filter()
{
bind();
gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_MAG_FILTER, gl::LINEAR);
gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_MIN_FILTER, gl::LINEAR_MIPMAP_LINEAR);
}
void texture_2d::anisotropy()
{
if (!gl::exts::var_EXT_texture_filter_anisotropic) return;
static std::optional<float> level;
if (!level)
{
level = 0;
gl::GetFloatv(gl::MAX_TEXTURE_MAX_ANISOTROPY_EXT, &(*level));
}
gl::TexParameterf(gl::TEXTURE_2D, gl::TEXTURE_MAX_ANISOTROPY_EXT, *level);
}
}