summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libweston/renderer-gl/gl-renderer.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/libweston/renderer-gl/gl-renderer.c b/libweston/renderer-gl/gl-renderer.c
index 32132163..46dd41cc 100644
--- a/libweston/renderer-gl/gl-renderer.c
+++ b/libweston/renderer-gl/gl-renderer.c
@@ -2229,26 +2229,29 @@ gl_renderer_repaint_output(struct weston_output *output,
uint32_t *pixels = rb->pixels;
int width = go->fb_size.width;
int stride = width * (compositor->read_format->bpp >> 3);
- pixman_box32_t *extents = &rb->base.damage.extents;
+ pixman_box32_t extents;
struct weston_geometry rect = {
.x = go->area.x,
.width = go->area.width,
};
+ extents = weston_matrix_transform_rect(&output->matrix,
+ rb->base.damage.extents);
+
if (gr->fan_debug) {
rect.y = go->fb_size.height - go->area.y - go->area.height;
rect.height = go->area.height;
} else {
- rect.y = go->fb_size.height - go->area.y - extents->y2;
- rect.height = extents->y2 - extents->y1;
- pixels += rect.width * (extents->y1 - (int)output->pos.c.y);
+ rect.y = go->fb_size.height - go->area.y - extents.y2;
+ rect.height = extents.y2 - extents.y1;
+ pixels += rect.width * extents.y1;
}
if (gr->gl_version >= gr_gl_version(3, 0) && ! gr->fan_debug) {
glPixelStorei(GL_PACK_ROW_LENGTH, width);
- rect.width = extents->x2 - extents->x1;
- rect.x += extents->x1 - (int)output->pos.c.x;
- pixels += extents->x1 - (int)output->pos.c.x;
+ rect.width = extents.x2 - extents.x1;
+ rect.x += extents.x1;
+ pixels += extents.x1;
}
gl_renderer_do_read_pixels(gr, compositor->read_format, pixels,