projects
/
vrfileman
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
-no-srgb option
[vrfileman]
/
src
/
texture.cc
diff --git
a/src/texture.cc
b/src/texture.cc
index
95d34e3
..
49f3aab
100644
(file)
--- a/
src/texture.cc
+++ b/
src/texture.cc
@@
-3,6
+3,7
@@
#include "image.h"
#include "opengl.h"
#include "imago2.h"
#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
#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);
}
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;
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:
switch(ifmt) {
case GL_LUMINANCE16F:
case GL_LUMINANCE32F:
+ case GL_SLUMINANCE:
return GL_LUMINANCE;
case GL_RGB16F:
case GL_RGB32F:
return GL_LUMINANCE;
case GL_RGB16F:
case GL_RGB32F:
+ case GL_SRGB:
return GL_RGB;
case GL_RGBA16F:
case GL_RGBA32F:
return GL_RGB;
case GL_RGBA16F:
case GL_RGBA32F:
+ case GL_SRGB_ALPHA:
return GL_RGBA;
default:
return GL_RGBA;
default:
@@
-383,19
+395,27
@@
static int gltype_from_ifmt(unsigned int ifmt)
static int glifmt_from_imgfmt(Image::Format fmt)
{
static int glifmt_from_imgfmt(Image::Format fmt)
{
+ bool use_srgb = GLEW_EXT_texture_sRGB && opt.srgb;
+
switch(fmt) {
case Image::FMT_GREY:
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_GREY_FLOAT:
return GL_LUMINANCE16F;
+
case Image::FMT_RGB:
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_RGB_FLOAT:
return GL_RGB16F;
+
case Image::FMT_RGBA:
case Image::FMT_RGBA:
- return GL_RGBA;
+ return use_srgb ? GL_SRGB_ALPHA : GL_RGBA;
+
case Image::FMT_RGBA_FLOAT:
return GL_RGBA16F;
case Image::FMT_RGBA_FLOAT:
return GL_RGBA16F;
+
default:
break;
}
default:
break;
}
@@
-406,14
+426,17
@@
static Image::Format imgfmt_from_glifmt(unsigned int ifmt)
{
switch(ifmt) {
case GL_LUMINANCE:
{
switch(ifmt) {
case GL_LUMINANCE:
+ case GL_SLUMINANCE:
return Image::FMT_GREY;
case GL_LUMINANCE16F:
return Image::FMT_GREY_FLOAT;
case GL_RGB:
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:
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;
return Image::FMT_RGBA;
case GL_RGBA16F:
return Image::FMT_RGBA_FLOAT;