mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-25 22:25:58 +01:00
output-damage: support direct scan-out
In case direct scan-out is used, we still need to accumulate damage for the render-buffers.
This commit is contained in:
parent
6c659da98b
commit
e07ffaa249
1 changed files with 18 additions and 5 deletions
|
@ -59,12 +59,25 @@ static void output_handle_commit(struct wl_listener *listener, void *data) {
|
|||
return;
|
||||
}
|
||||
|
||||
// same as decrementing, but works on unsigned integers
|
||||
output_damage->previous_idx += WLR_OUTPUT_DAMAGE_PREVIOUS_LEN - 1;
|
||||
output_damage->previous_idx %= WLR_OUTPUT_DAMAGE_PREVIOUS_LEN;
|
||||
pixman_region32_t *prev;
|
||||
switch (output_damage->output->pending.buffer_type) {
|
||||
case WLR_OUTPUT_STATE_BUFFER_RENDER:
|
||||
// render-buffers have been swapped, rotate the damage
|
||||
|
||||
// same as decrementing, but works on unsigned integers
|
||||
output_damage->previous_idx += WLR_OUTPUT_DAMAGE_PREVIOUS_LEN - 1;
|
||||
output_damage->previous_idx %= WLR_OUTPUT_DAMAGE_PREVIOUS_LEN;
|
||||
|
||||
prev = &output_damage->previous[output_damage->previous_idx];
|
||||
pixman_region32_copy(prev, &output_damage->current);
|
||||
break;
|
||||
case WLR_OUTPUT_STATE_BUFFER_SCANOUT:
|
||||
// accumulate render-buffer damage
|
||||
prev = &output_damage->previous[output_damage->previous_idx];
|
||||
pixman_region32_union(prev, prev, &output_damage->current);
|
||||
break;
|
||||
}
|
||||
|
||||
pixman_region32_copy(&output_damage->previous[output_damage->previous_idx],
|
||||
&output_damage->current);
|
||||
pixman_region32_clear(&output_damage->current);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue