gsk: Linearize colors too

Convert all the GdkRGBA colors that we have
in render nodes to linear sRGB before using
them. This brings the rendering back in line
with what cairo produces, except for the video.
This commit is contained in:
Matthias Clasen
2022-05-08 13:19:59 -04:00
parent 4ada2fe69c
commit c4a5b72a5f

View File

@@ -27,6 +27,7 @@
#include <gdk/gdkprofilerprivate.h>
#include <gdk/gdkrgbaprivate.h>
#include <gdk/gdkcolorprofileprivate.h>
#include <gdk/gdkmemoryformatprivate.h>
#include <gsk/gskrendernodeprivate.h>
#include <gsk/gskglshaderprivate.h>
#include <gdk/gdktextureprivate.h>
@@ -989,11 +990,23 @@ gsk_gl_render_job_update_clip (GskGLRenderJob *job,
return TRUE;
}
/* Convert from sRGB floats to linear sRGB half-floats */
static inline void
rgba_to_half (const GdkRGBA *rgba,
guint16 h[4])
{
float_to_half4 ((const float *)rgba, h);
GdkRGBA d;
gdk_memory_convert ((guchar *) &d,
sizeof (float) * 4,
GDK_MEMORY_R32G32B32A32_FLOAT,
gdk_color_profile_get_srgb_linear (),
(guchar *) rgba,
sizeof (float) * 4,
GDK_MEMORY_R32G32B32A32_FLOAT,
gdk_color_profile_get_srgb (),
1,
1);
float_to_half4 ((const float *)&d, h);
}
/* fill_vertex_data */