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.
This commit is contained in:
Timm Bäder
2018-05-01 12:51:04 +02:00
parent 3a5a9d9233
commit d506799e72

View File

@@ -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 transformed_node_bounds;
graphene_matrix_transform_bounds (&builder->current_modelview,
&node->bounds,
&transformed_node_bounds);
graphene_rect_offset (&transformed_node_bounds, builder->dx, builder->dy);
if (!graphene_rect_intersection (&builder->current_clip.bounds,
&transformed_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,