[gtk/wip/baedert/emoji-loading] gl renderer: Ignore nodes outside of the clip



commit 2afd0dad693f216676b375e8ae4b10639c26acb7
Author: Timm Bäder <mail baedert org>
Date:   Tue May 1 12:51:04 2018 +0200

    gl renderer: Ignore nodes  outside of the clip
    
    Pretty sure this will bite me later but for now we avoid rendering nodes
    that we are not going to see anyway.

 gsk/gl/gskglrenderer.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)
---
diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c
index eca829a18c..ab27264cf9 100644
--- a/gsk/gl/gskglrenderer.c
+++ b/gsk/gl/gskglrenderer.c
@@ -2055,7 +2055,6 @@ gsk_gl_renderer_add_render_ops (GskGLRenderer   *self,
   const float min_y = builder->dy + node->bounds.origin.y;
   const float max_x = min_x + node->bounds.size.width;
   const float max_y = min_y + node->bounds.size.height;
-
   /* Default vertex data */
   const GskQuadVertex vertex_data[GL_N_VERTICES] = {
     { { min_x, min_y }, { 0, 0 }, },
@@ -2072,6 +2071,21 @@ gsk_gl_renderer_add_render_ops (GskGLRenderer   *self,
   if (node->bounds.size.width == 0.0f || node->bounds.size.height == 0.0f)
     return;
 
+  /* Check whether the render node is entirely out of the current
+   * already transformed clip region */
+  {
+    graphene_rect_t real_node_bounds;
+
+    graphene_matrix_transform_bounds (&builder->current_modelview,
+                                      &node->bounds,
+                                      &real_node_bounds);
+    graphene_rect_offset (&real_node_bounds, builder->dx, builder->dy);
+
+    if (!graphene_rect_intersection (&builder->current_clip.bounds,
+                                     &real_node_bounds, NULL))
+      return;
+  }
+
 #if DEBUG_OPS
   if (gsk_render_node_get_node_type (node) != GSK_CONTAINER_NODE)
     g_message ("Adding ops for node %s with type %u", node->name,


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