[gtk/wip/baedert/emoji-loading] gl renderer: Ignore nodes outside of the clip
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/baedert/emoji-loading] gl renderer: Ignore nodes outside of the clip
- Date: Tue, 1 May 2018 10:53:14 +0000 (UTC)
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]