mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-07 14:06:00 +01:00
surface: copy buffer damage to surface damage
This commit is contained in:
parent
1ee61dbd0f
commit
e049610b47
1 changed files with 17 additions and 3 deletions
|
@ -233,16 +233,30 @@ static void wlr_surface_move_state(struct wlr_surface *surface,
|
||||||
update_damage = true;
|
update_damage = true;
|
||||||
}
|
}
|
||||||
if (update_damage) {
|
if (update_damage) {
|
||||||
pixman_region32_t buffer_damage;
|
pixman_region32_t buffer_damage, surface_damage;
|
||||||
pixman_region32_init(&buffer_damage);
|
pixman_region32_init(&buffer_damage);
|
||||||
|
pixman_region32_init(&surface_damage);
|
||||||
|
|
||||||
|
// Surface to buffer damage
|
||||||
pixman_region32_copy(&buffer_damage, &state->surface_damage);
|
pixman_region32_copy(&buffer_damage, &state->surface_damage);
|
||||||
wlr_region_transform(&buffer_damage, &buffer_damage,
|
wlr_region_transform(&buffer_damage, &buffer_damage,
|
||||||
wlr_output_transform_invert(state->transform),
|
wlr_output_transform_invert(state->transform),
|
||||||
state->width, state->height);
|
state->width, state->height);
|
||||||
wlr_region_scale(&buffer_damage, &buffer_damage, state->scale);
|
wlr_region_scale(&buffer_damage, &buffer_damage, state->scale);
|
||||||
pixman_region32_union(&state->buffer_damage,
|
|
||||||
&state->buffer_damage, &buffer_damage);
|
// Buffer to surface damage
|
||||||
|
pixman_region32_copy(&surface_damage, &state->buffer_damage);
|
||||||
|
wlr_region_transform(&surface_damage, &surface_damage, state->transform,
|
||||||
|
state->buffer_width, state->buffer_height);
|
||||||
|
wlr_region_scale(&surface_damage, &surface_damage, 1.0f/state->scale);
|
||||||
|
|
||||||
|
pixman_region32_union(&state->buffer_damage, &state->buffer_damage,
|
||||||
|
&buffer_damage);
|
||||||
|
pixman_region32_union(&state->surface_damage, &state->surface_damage,
|
||||||
|
&surface_damage);
|
||||||
|
|
||||||
pixman_region32_fini(&buffer_damage);
|
pixman_region32_fini(&buffer_damage);
|
||||||
|
pixman_region32_fini(&surface_damage);
|
||||||
}
|
}
|
||||||
if ((next->invalid & WLR_SURFACE_INVALID_OPAQUE_REGION)) {
|
if ((next->invalid & WLR_SURFACE_INVALID_OPAQUE_REGION)) {
|
||||||
// TODO: process buffer
|
// TODO: process buffer
|
||||||
|
|
Loading…
Reference in a new issue