output: switch swap_buffers damage to output-buffer-local coords

This is one more step towards [1]. This gives more freedom to the compositor
wrt. how it handles damage.

[1]: https://github.com/swaywm/wlroots/issues/1363
This commit is contained in:
emersion 2018-12-01 10:56:35 +01:00
parent a22311ec76
commit 6aaefad40d
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48
3 changed files with 12 additions and 14 deletions

View file

@ -365,9 +365,6 @@ bool wlr_output_swap_buffers(struct wlr_output *output, struct timespec *when,
output->idle_frame = NULL;
}
int width, height;
wlr_output_transformed_resolution(output, &width, &height);
struct timespec now;
if (when == NULL) {
clock_gettime(CLOCK_MONOTONIC, &now);
@ -384,19 +381,12 @@ bool wlr_output_swap_buffers(struct wlr_output *output, struct timespec *when,
pixman_region32_t render_damage;
pixman_region32_init(&render_damage);
pixman_region32_union_rect(&render_damage, &render_damage, 0, 0,
width, height);
output->width, output->height);
if (damage != NULL) {
// Damage tracking supported
pixman_region32_intersect(&render_damage, &render_damage, damage);
}
// Transform damage into renderer coordinates, ie. upside down
// TODO: take transformed coords, make the renderer flip the damage
enum wl_output_transform transform =
wlr_output_transform_invert(output->transform);
wlr_region_transform(&render_damage, &render_damage, transform,
width, height);
if (!output->impl->swap_buffers(output, damage ? &render_damage : NULL)) {
pixman_region32_fini(&render_damage);
return false;