From 8f18958cc56ddca98a602e478ca2108125c9b9c0 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Thu, 15 Jun 2023 10:45:43 +0200 Subject: [PATCH] backend-vnc: use weston_region_global_to_output Instead of directly converting damage from pixman_region32_t in global coordinates to pixman_region16_t in local coordinates, use weston_region_global_to_output() to convert to pixman_region32_t in local coordinates and then convert again to pixman_region16_t in the same coordinate system, using vnc_region32_to_region16(). Signed-off-by: Philipp Zabel --- libweston/backend-vnc/vnc.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/libweston/backend-vnc/vnc.c b/libweston/backend-vnc/vnc.c index 6e02b61c2..3ba81fbf3 100644 --- a/libweston/backend-vnc/vnc.c +++ b/libweston/backend-vnc/vnc.c @@ -527,14 +527,8 @@ vnc_output_update_cursor(struct vnc_output *output) nvnc_fb_unref(fb); } -/* - * Convert damage rectangles from 32-bit global coordinates to 16-bit local - * coordinates. The output transformation has to be a pure translation. - */ static void -vnc_region_global_to_output(pixman_region16_t *dst, - struct weston_output *output, - pixman_region32_t *src) +vnc_region32_to_region16(pixman_region16_t *dst, pixman_region32_t *src) { struct pixman_box32 *src_rects; struct pixman_box16 *dest_rects; @@ -548,10 +542,10 @@ vnc_region_global_to_output(pixman_region16_t *dst, dest_rects = xcalloc(n_rects, sizeof(*dest_rects)); for (i = 0; i < n_rects; i++) { - dest_rects[i].x1 = src_rects[i].x1 - output->pos.c.x; - dest_rects[i].y1 = src_rects[i].y1 - output->pos.c.y; - dest_rects[i].x2 = src_rects[i].x2 - output->pos.c.x; - dest_rects[i].y2 = src_rects[i].y2 - output->pos.c.y; + dest_rects[i].x1 = src_rects[i].x1; + dest_rects[i].y1 = src_rects[i].y1; + dest_rects[i].x2 = src_rects[i].x2; + dest_rects[i].y2 = src_rects[i].y2; } pixman_region_init_rects(dst, dest_rects, n_rects); @@ -608,7 +602,8 @@ vnc_update_buffer(struct nvnc_display *display, struct pixman_region32 *damage) struct vnc_output *output = backend->output; struct weston_compositor *ec = output->base.compositor; struct weston_renderbuffer *renderbuffer; - pixman_region16_t local_damage; + pixman_region32_t local_damage; + pixman_region16_t nvnc_damage; struct nvnc_fb *fb; fb = nvnc_fb_pool_acquire(output->fb_pool); @@ -659,12 +654,17 @@ vnc_update_buffer(struct nvnc_display *display, struct pixman_region32 *damage) ec->renderer->repaint_output(&output->base, damage, renderbuffer); /* Convert to local coordinates */ - pixman_region_init(&local_damage); - vnc_region_global_to_output(&local_damage, &output->base, damage); + pixman_region32_init(&local_damage); + weston_region_global_to_output(&local_damage, &output->base, damage); - nvnc_display_feed_buffer(output->display, fb, &local_damage); + /* Convert to 16-bit */ + pixman_region_init(&nvnc_damage); + vnc_region32_to_region16(&nvnc_damage, &local_damage); + + nvnc_display_feed_buffer(output->display, fb, &nvnc_damage); nvnc_fb_unref(fb); - pixman_region_fini(&local_damage); + pixman_region32_fini(&local_damage); + pixman_region_fini(&nvnc_damage); } static void