]> git.tdb.fi Git - libs/gl.git/commitdiff
Fix loading sRGB external images for textures
authorMikko Rasa <tdb@tdb.fi>
Wed, 14 Apr 2021 15:07:50 +0000 (18:07 +0300)
committerMikko Rasa <tdb@tdb.fi>
Wed, 14 Apr 2021 15:07:50 +0000 (18:07 +0300)
This fixes bugs introduced in 9087cc0 (sRGB state ignored when setting
internal format) and 635e5dc (external_image_srgb handled incorrectly).

source/core/pixelformat.cpp
source/core/pixelformat.h
source/core/texture.cpp

index 8cc7c9c9d8f2e13fa0d9d05f4de57128a8233491..9a28cdcebfee50d3de079bc96d3c96baa0892212 100644 (file)
@@ -336,6 +336,11 @@ DataType get_component_type(PixelFormat pf)
        }
 }
 
+bool is_srgb(PixelFormat pf)
+{
+       return (pf==SRGB8 || pf==SRGB8_ALPHA8 || pf==SBGR8 || pf==SBGR8_ALPHA8);
+}
+
 unsigned get_pixel_size(PixelFormat pf)
 {
        return get_component_count(pf)*get_type_size(get_component_type(pf));
index 213328a5578f393acd616eb092a5a55322dc0d07..c9d813cef1bff430200587996f864be8d089e609 100644 (file)
@@ -83,6 +83,8 @@ DataType get_component_type(PixelFormat);
 inline unsigned get_component_size(PixelFormat f)
 { return get_type_size(get_component_type(f)); }
 
+bool is_srgb(PixelFormat);
+
 unsigned get_pixel_size(PixelFormat);
 
 void require_pixelformat(PixelFormat);
index 155dcae123d1945031c3da3c1b0f068eccc6f007..3a4b1096f99cb2edee54137194f64cb3b805b808 100644 (file)
@@ -75,7 +75,7 @@ void Texture::set_format(PixelFormat fmt)
        default:;
        }
 
-       PixelFormat st_fmt = make_pixelformat(st_comp, get_component_type(fmt));
+       PixelFormat st_fmt = make_pixelformat(st_comp, get_component_type(fmt), is_srgb(fmt));
        require_pixelformat(st_fmt);
        if(swiz!=NO_SWIZZLE)
                static Require _req(ARB_texture_swizzle);
@@ -287,7 +287,7 @@ void Texture::Loader::init()
        levels = 0;
 
        add("external_image", &Loader::external_image);
-       add("external_image_srgb", &Loader::external_image);
+       add("external_image_srgb", &Loader::external_image_srgb);
        add("filter", &Loader::filter);
        add("generate_mipmap", &Loader::generate_mipmap);
        add("image_data", &Loader::image_data);