[gtk+/wip/baedert/gl: 90/95] snapshot: Directly clip color nodes
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/baedert/gl: 90/95] snapshot: Directly clip color nodes
- Date: Tue, 19 Dec 2017 14:50:00 +0000 (UTC)
commit bce826d3ec9fd9b53e505e091cfc0efd4cc8dbd0
Author: Timm Bäder <mail baedert org>
Date: Tue Dec 12 20:33:53 2017 +0100
snapshot: Directly clip color nodes
Clipping a color node is trivial so we do it here directly since that
might later save the entire clip node as well as freeing the fragment
shaders from coloring lots of pixels that will be clipped away.
gtk/gtksnapshot.c | 16 ++++++++++++++++
1 files changed, 16 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtksnapshot.c b/gtk/gtksnapshot.c
index d632ef6..c3f9295 100644
--- a/gtk/gtksnapshot.c
+++ b/gtk/gtksnapshot.c
@@ -1345,7 +1345,23 @@ gtk_snapshot_append_color (GtkSnapshot *snapshot,
g_return_if_fail (color != NULL);
g_return_if_fail (bounds != NULL);
+
graphene_rect_offset_r (bounds, current_state->translate_x, current_state->translate_y, &real_bounds);
+
+ /* Color nodes are trivially "clippable" so we do it now */
+ if (current_state->clip_region)
+ {
+ cairo_rectangle_int_t clip_extents;
+ cairo_region_get_extents (current_state->clip_region, &clip_extents);
+ graphene_rect_intersection (&GRAPHENE_RECT_INIT (
+ clip_extents.x,
+ clip_extents.y,
+ clip_extents.width,
+ clip_extents.height
+ ),
+ &real_bounds, &real_bounds);
+ }
+
node = gsk_color_node_new (color, &real_bounds);
if (name && snapshot->record_names)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]