[gtk/matthiasc/color-profile-rebased] gsk: Add profile in gsk_renderer_render_texture



commit 6398ad440b6194b96a0c553e78645d847bf564b9
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon May 9 17:05:11 2022 -0400

    gsk: Add profile in gsk_renderer_render_texture
    
    Make gsk_renderer_render_texture produce a texture
    that has the correct color profile attached. This
    fixes the rendering of node files in the node editor.

 gsk/gl/gskgldriver.c        | 20 ++++++++++++--------
 gsk/gl/gskgldriverprivate.h |  4 +++-
 gsk/gl/gskglrenderer.c      |  6 +++++-
 3 files changed, 20 insertions(+), 10 deletions(-)
---
diff --git a/gsk/gl/gskgldriver.c b/gsk/gl/gskgldriver.c
index 43b01ea5ee..7dde516fd6 100644
--- a/gsk/gl/gskgldriver.c
+++ b/gsk/gl/gskgldriver.c
@@ -1543,8 +1543,10 @@ create_texture_from_texture_destroy (gpointer data)
 }
 
 GdkTexture *
-gsk_gl_driver_create_gdk_texture (GskGLDriver *self,
-                                  guint        texture_id)
+gsk_gl_driver_create_gdk_texture (GskGLDriver       *self,
+                                  guint              texture_id,
+                                  GdkGLTextureFlags  flags,
+                                  GdkColorProfile   *profile)
 {
   GskGLTextureState *state;
   GskGLTexture *texture;
@@ -1572,10 +1574,12 @@ gsk_gl_driver_create_gdk_texture (GskGLDriver *self,
   texture->texture_id = 0;
   gsk_gl_texture_free (texture);
 
-  return gdk_gl_texture_new (self->command_queue->context,
-                             texture_id,
-                             width,
-                             height,
-                             create_texture_from_texture_destroy,
-                             state);
+  return gdk_gl_texture_new_with_color_profile (self->command_queue->context,
+                                                texture_id,
+                                                width,
+                                                height,
+                                                flags,
+                                                profile,
+                                                create_texture_from_texture_destroy,
+                                                state);
 }
diff --git a/gsk/gl/gskgldriverprivate.h b/gsk/gl/gskgldriverprivate.h
index accae5b3bb..eff69c19be 100644
--- a/gsk/gl/gskgldriverprivate.h
+++ b/gsk/gl/gskgldriverprivate.h
@@ -155,7 +155,9 @@ void                gsk_gl_driver_begin_frame            (GskGLDriver         *s
 void                gsk_gl_driver_end_frame              (GskGLDriver         *self);
 void                gsk_gl_driver_after_frame            (GskGLDriver         *self);
 GdkTexture        * gsk_gl_driver_create_gdk_texture     (GskGLDriver         *self,
-                                                          guint                texture_id);
+                                                          guint                texture_id,
+                                                          GdkGLTextureFlags    flags,
+                                                          GdkColorProfile     *profile);
 void                gsk_gl_driver_cache_texture          (GskGLDriver         *self,
                                                           const GskTextureKey *key,
                                                           guint                texture_id);
diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c
index afb34cd2f1..7c91b3cd3a 100644
--- a/gsk/gl/gskglrenderer.c
+++ b/gsk/gl/gskglrenderer.c
@@ -24,6 +24,7 @@
 #include <gdk/gdkdisplayprivate.h>
 #include <gdk/gdkglcontextprivate.h>
 #include <gdk/gdksurfaceprivate.h>
+#include <gdk/gdkcolorprofileprivate.h>
 #include <gdk/gdkintl.h>
 #include <gsk/gskdebugprivate.h>
 #include <gsk/gskrendererprivate.h>
@@ -386,7 +387,10 @@ gsk_gl_renderer_render_texture (GskRenderer           *renderer,
 #endif
       gsk_gl_render_job_render_flipped (job, root);
       texture_id = gsk_gl_driver_release_render_target (self->driver, render_target, FALSE);
-      texture = gsk_gl_driver_create_gdk_texture (self->driver, texture_id);
+      texture = gsk_gl_driver_create_gdk_texture (self->driver,
+                                                  texture_id,
+                                                  GDK_GL_TEXTURE_PREMULTIPLIED,
+                                                  gdk_color_profile_get_srgb_linear ());
       gsk_gl_driver_end_frame (self->driver);
       gsk_gl_render_job_free (job);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]