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:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user