diff --git a/libweston/renderer-gl/gl-renderer.c b/libweston/renderer-gl/gl-renderer.c index ccb41e662..62037c6b1 100644 --- a/libweston/renderer-gl/gl-renderer.c +++ b/libweston/renderer-gl/gl-renderer.c @@ -2021,7 +2021,8 @@ gl_renderer_repaint_output(struct weston_output *output, if (rb->pixels) { uint32_t *pixels = rb->pixels; - int stride = go->fb_size.width; + int width = go->fb_size.width; + int stride = width * (compositor->read_format->bpp >> 3); pixman_box32_t *extents = &rb->base.damage.extents; struct weston_geometry rect = { .x = go->area.x, @@ -2038,13 +2039,14 @@ gl_renderer_repaint_output(struct weston_output *output, } if (gr->gl_version >= gr_gl_version(3, 0) && ! gr->fan_debug) { - glPixelStorei(GL_PACK_ROW_LENGTH, stride); + 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; } - gl_renderer_do_read_pixels(gr, compositor->read_format, pixels, stride, &rect); + gl_renderer_do_read_pixels(gr, compositor->read_format, pixels, + stride, &rect); if (gr->gl_version >= gr_gl_version(3, 0)) glPixelStorei(GL_PACK_ROW_LENGTH, 0);