From 5615fd26c2e2de29fe7c710a42cc5b9ad1b20c70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= Date: Thu, 23 Nov 2017 10:02:58 +0100 Subject: [PATCH] gl renderer: Implement cairo nodes again --- gsk/gl/gskglrenderer.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c index 9dba958768..5028273434 100644 --- a/gsk/gl/gskglrenderer.c +++ b/gsk/gl/gskglrenderer.c @@ -682,6 +682,32 @@ gsk_gl_renderer_add_render_ops (GskGLRenderer *self, } break; + case GSK_CAIRO_NODE: + { + const cairo_surface_t *surface = gsk_cairo_node_peek_surface (node); + int gl_min_filter = GL_NEAREST, gl_mag_filter = GL_NEAREST; + int texture_id; + + if (surface == NULL) + return; + + get_gl_scaling_filters (node, &gl_min_filter, &gl_mag_filter); + + texture_id = gsk_gl_driver_create_texture (self->gl_driver, + max_x - min_x, + max_y - min_y); + gsk_gl_driver_bind_source_texture (self->gl_driver, texture_id); + gsk_gl_driver_init_texture_with_surface (self->gl_driver, + texture_id, + (cairo_surface_t *)surface, + gl_min_filter, + gl_mag_filter); + ops_set_program (builder, &self->blit_program); + ops_set_texture (builder, texture_id); + ops_draw (builder, vertex_data); + } + break; + case GSK_TRANSFORM_NODE: { GskRenderNode *child = gsk_transform_node_get_child (node); @@ -936,7 +962,6 @@ gsk_gl_renderer_add_render_ops (GskGLRenderer *self, case GSK_CROSS_FADE_NODE: case GSK_BLEND_NODE: case GSK_REPEAT_NODE: - case GSK_CAIRO_NODE: case GSK_COLOR_MATRIX_NODE: default: {