X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=vrfileman;a=blobdiff_plain;f=src%2Ftexture.cc;h=49f3aabe30f02a13b1819f7b528340dcb28577b7;hp=95d34e317845e83f4d616f0c61c91f877aff24bd;hb=05cc7dce02b656e633c880dcc55acdf370cb25c1;hpb=84320a4b92c1922cd40bd7ce3d942d19cc704bd2 diff --git a/src/texture.cc b/src/texture.cc index 95d34e3..49f3aab 100644 --- a/src/texture.cc +++ b/src/texture.cc @@ -3,6 +3,7 @@ #include "image.h" #include "opengl.h" #include "imago2.h" +#include "opt.h" #if defined(GL_ES_VERSION_2_0) || defined(GL_VERSION_3_0) #define USE_GL_GENERATE_MIPMAP @@ -110,6 +111,14 @@ void Texture::set_filtering(unsigned int min_filt, unsigned int mag_filt) glTexParameteri(target, GL_TEXTURE_MAG_FILTER, mag_filt); } +void Texture::set_anisotropy(int aniso) +{ + if(GLEW_EXT_texture_filter_anisotropic) { + glBindTexture(target, id); + glTexParameteri(target, GL_TEXTURE_MAX_ANISOTROPY_EXT, aniso); + } +} + unsigned int Texture::get_format() const { return texfmt; @@ -345,14 +354,17 @@ static int glfmt_from_ifmt(unsigned int ifmt) switch(ifmt) { case GL_LUMINANCE16F: case GL_LUMINANCE32F: + case GL_SLUMINANCE: return GL_LUMINANCE; case GL_RGB16F: case GL_RGB32F: + case GL_SRGB: return GL_RGB; case GL_RGBA16F: case GL_RGBA32F: + case GL_SRGB_ALPHA: return GL_RGBA; default: @@ -383,19 +395,27 @@ static int gltype_from_ifmt(unsigned int ifmt) static int glifmt_from_imgfmt(Image::Format fmt) { + bool use_srgb = GLEW_EXT_texture_sRGB && opt.srgb; + switch(fmt) { case Image::FMT_GREY: - return GL_LUMINANCE; + return use_srgb ? GL_SLUMINANCE : GL_LUMINANCE; + case Image::FMT_GREY_FLOAT: return GL_LUMINANCE16F; + case Image::FMT_RGB: - return GL_RGB; + return use_srgb ? GL_SRGB : GL_RGB; + case Image::FMT_RGB_FLOAT: return GL_RGB16F; + case Image::FMT_RGBA: - return GL_RGBA; + return use_srgb ? GL_SRGB_ALPHA : GL_RGBA; + case Image::FMT_RGBA_FLOAT: return GL_RGBA16F; + default: break; } @@ -406,14 +426,17 @@ static Image::Format imgfmt_from_glifmt(unsigned int ifmt) { switch(ifmt) { case GL_LUMINANCE: + case GL_SLUMINANCE: return Image::FMT_GREY; case GL_LUMINANCE16F: return Image::FMT_GREY_FLOAT; case GL_RGB: + case GL_SRGB: return Image::FMT_RGB; case GL_RGB16F: return Image::FMT_RGB_FLOAT; case GL_RGBA: + case GL_SRGB_ALPHA: return Image::FMT_RGBA; case GL_RGBA16F: return Image::FMT_RGBA_FLOAT;