screencopy: check if damage committed before copy

This check avoids copying stale state from output->pending.damage.
This commit is contained in:
Isaac Freund 2020-12-06 16:58:52 +01:00 committed by Simon Ser
parent 1ecc1b5987
commit 37cb3eb8dd
1 changed files with 6 additions and 7 deletions

View File

@ -51,15 +51,14 @@ static void screencopy_damage_accumulate(struct screencopy_damage *damage) {
int width, height;
wlr_output_transformed_resolution(output, &width, &height);
// If the compositor did not submit damage but did submit a buffer,
if (!(output->pending.committed & WLR_OUTPUT_STATE_DAMAGE) &&
(output->pending.committed & WLR_OUTPUT_STATE_BUFFER)) {
// damage everything
pixman_region32_union_rect(region, region, 0, 0, width, height);
} else {
// otherwise copy over the current damage
if (output->pending.committed & WLR_OUTPUT_STATE_DAMAGE) {
// If the compositor submitted damage, copy it over
pixman_region32_union(region, region, &output->pending.damage);
pixman_region32_intersect_rect(region, region, 0, 0, width, height);
} else if (output->pending.committed & WLR_OUTPUT_STATE_BUFFER) {
// If the compositor did not submit damage but did submit a buffer
// damage everything
pixman_region32_union_rect(region, region, 0, 0, width, height);
}
damage->last_commit_seq = output->commit_seq;