[gtk/matthiasc/color-profile-rebased: 34/52] gsk: Linearize colors too
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/matthiasc/color-profile-rebased: 34/52] gsk: Linearize colors too
- Date: Fri, 30 Sep 2022 02:08:02 +0000 (UTC)
commit d77e1e72301c8f89d86bb4a00c4e1115e999fb59
Author: Matthias Clasen <mclasen redhat com>
Date: Sun May 8 13:19:59 2022 -0400
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.
gsk/gl/gskglrenderjob.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
---
diff --git a/gsk/gl/gskglrenderjob.c b/gsk/gl/gskglrenderjob.c
index 5cfa7863ba..51c042472a 100644
--- a/gsk/gl/gskglrenderjob.c
+++ b/gsk/gl/gskglrenderjob.c
@@ -27,6 +27,7 @@
#include <gdk/gdkprofilerprivate.h>
#include <gdk/gdkrgbaprivate.h>
#include <gdk/gdkcolorspaceprivate.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_space_get_srgb_linear (),
+ (guchar *) rgba,
+ sizeof (float) * 4,
+ GDK_MEMORY_R32G32B32A32_FLOAT,
+ gdk_color_space_get_srgb (),
+ 1,
+ 1);
+ float_to_half4 ((const float *)&d, h);
}
/* fill_vertex_data */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]