wlr_scene: Don't damage when setting opaque region

Opaque region is a optimization hint, (bugs outstanding) it will not
change the output contents, therefore damage does not need to be submitted.

However, we still need to update the visibility state of the other
nodes in the tree. To do this call scene_update_region() by ourselves
but not `scene_node_update()` which will damage the outputs.
This commit is contained in:
Alexander Orzechowski 2023-07-22 19:18:06 -04:00
parent a32180afa7
commit fd540f6d07
1 changed files with 11 additions and 1 deletions

View File

@ -764,7 +764,17 @@ void wlr_scene_buffer_set_opaque_region(struct wlr_scene_buffer *scene_buffer,
}
pixman_region32_copy(&scene_buffer->opaque_region, region);
scene_node_update(&scene_buffer->node, NULL);
int x, y;
if (!wlr_scene_node_coords(&scene_buffer->node, &x, &y)) {
return;
}
pixman_region32_t update_region;
pixman_region32_init(&update_region);
scene_node_bounds(&scene_buffer->node, x, y, &update_region);
scene_update_region(scene_node_get_root(&scene_buffer->node), &update_region);
pixman_region32_fini(&update_region);
}
void wlr_scene_buffer_set_source_box(struct wlr_scene_buffer *scene_buffer,