[gtk+/wip/alexl/broadway4] broadway: Handle cairo nodes
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/alexl/broadway4] broadway: Handle cairo nodes
- Date: Thu, 23 Nov 2017 07:37:07 +0000 (UTC)
commit 37bc0e3c517d96150ea1ac2dff2863c19b101ecc
Author: Alexander Larsson <alexl redhat com>
Date: Wed Nov 22 23:42:29 2017 +0100
broadway: Handle cairo nodes
This means we can directly upload these as textures, rather than
create a new surface and draw it into that. We still have to upload,
but there isn't a lot we can do about this as for these nodes
we generally redraw everything each time.
gsk/gskbroadwayrenderer.c | 19 +++++++++++++++++++
1 files changed, 19 insertions(+), 0 deletions(-)
---
diff --git a/gsk/gskbroadwayrenderer.c b/gsk/gskbroadwayrenderer.c
index ab62813..0ed849c 100644
--- a/gsk/gskbroadwayrenderer.c
+++ b/gsk/gskbroadwayrenderer.c
@@ -492,6 +492,25 @@ gsk_broadway_renderer_add_node (GskRenderer *self,
}
return;
+ case GSK_CAIRO_NODE:
+ {
+ const cairo_surface_t *surface = gsk_cairo_node_peek_surface (node);
+ GdkTexture *texture;
+ guint32 texture_id;
+
+ texture = gdk_texture_new_for_surface ((cairo_surface_t *)surface);
+ g_ptr_array_add (node_textures, g_object_ref (texture)); /* Transfers ownership to node_textures */
+ texture_id = gdk_broadway_display_ensure_texture (display, texture);
+
+ add_uint32 (nodes, BROADWAY_NODE_TEXTURE);
+ add_float (nodes, node->bounds.origin.x);
+ add_float (nodes, node->bounds.origin.y);
+ add_float (nodes, node->bounds.size.width);
+ add_float (nodes, node->bounds.size.height);
+ add_uint32 (nodes, texture_id);
+ }
+ return;
+
case GSK_CONTAINER_NODE:
{
guint i;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]