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.
This commit is contained in:
Matthias Clasen
2022-05-09 17:05:11 -04:00
parent 7a1fc3f259
commit 3d9d762998
3 changed files with 20 additions and 10 deletions

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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);