screenshooter: Use the renderer function for reading out pixels
This also changes the compositor's read_format to a pixman format.
This commit is contained in:
parent
a95b2d6d41
commit
f9e710b57c
@ -353,7 +353,7 @@ struct weston_compositor {
|
||||
PFNEGLDESTROYIMAGEKHRPROC destroy_image;
|
||||
|
||||
int has_unpack_subimage;
|
||||
GLenum read_format;
|
||||
pixman_format_code_t read_format;
|
||||
|
||||
PFNEGLBINDWAYLANDDISPLAYWL bind_display;
|
||||
PFNEGLUNBINDWAYLANDDISPLAYWL unbind_display;
|
||||
|
@ -1751,9 +1751,9 @@ gles2_renderer_setup(struct weston_compositor *ec, EGLSurface egl_surface)
|
||||
}
|
||||
|
||||
if (strstr(extensions, "GL_EXT_read_format_bgra"))
|
||||
ec->read_format = GL_BGRA_EXT;
|
||||
ec->read_format = PIXMAN_a8r8g8b8;
|
||||
else
|
||||
ec->read_format = GL_RGBA;
|
||||
ec->read_format = PIXMAN_a8b8g8r8;
|
||||
|
||||
if (strstr(extensions, "GL_EXT_unpack_subimage"))
|
||||
ec->has_unpack_subimage = 1;
|
||||
|
@ -112,10 +112,10 @@ screenshooter_frame_notify(struct wl_listener *listener, void *data)
|
||||
return;
|
||||
}
|
||||
|
||||
glPixelStorei(GL_PACK_ALIGNMENT, 1);
|
||||
glReadPixels(0, 0, output->current->width, output->current->height,
|
||||
output->compositor->read_format,
|
||||
GL_UNSIGNED_BYTE, pixels);
|
||||
output->compositor->renderer->read_pixels(output,
|
||||
output->compositor->read_format, pixels,
|
||||
0, 0, output->current->width,
|
||||
output->current->height);
|
||||
|
||||
stride = wl_shm_buffer_get_stride(l->buffer);
|
||||
|
||||
@ -123,10 +123,10 @@ screenshooter_frame_notify(struct wl_listener *listener, void *data)
|
||||
s = pixels + stride * (l->buffer->height - 1);
|
||||
|
||||
switch (output->compositor->read_format) {
|
||||
case GL_BGRA_EXT:
|
||||
case PIXMAN_a8r8g8b8:
|
||||
copy_bgra_yflip(d, s, output->current->height, stride);
|
||||
break;
|
||||
case GL_RGBA:
|
||||
case PIXMAN_a8b8g8r8:
|
||||
copy_rgba_yflip(d, s, output->current->height, stride);
|
||||
break;
|
||||
default:
|
||||
@ -299,10 +299,10 @@ weston_recorder_frame_notify(struct wl_listener *listener, void *data)
|
||||
for (i = 0; i < n; i++) {
|
||||
width = r[i].x2 - r[i].x1;
|
||||
height = r[i].y2 - r[i].y1;
|
||||
glReadPixels(r[i].x1, output->current->height - r[i].y2,
|
||||
width, height,
|
||||
output->compositor->read_format,
|
||||
GL_UNSIGNED_BYTE, recorder->rect);
|
||||
output->compositor->renderer->read_pixels(output,
|
||||
output->compositor->read_format, recorder->rect,
|
||||
r[i].x1, output->current->height - r[i].y2,
|
||||
width, height);
|
||||
|
||||
s = recorder->rect;
|
||||
p = recorder->rect;
|
||||
@ -367,12 +367,15 @@ weston_recorder_create(struct weston_output *output, const char *filename)
|
||||
header.magic = WCAP_HEADER_MAGIC;
|
||||
|
||||
switch (output->compositor->read_format) {
|
||||
case GL_BGRA_EXT:
|
||||
case PIXMAN_a8r8g8b8:
|
||||
header.format = WCAP_FORMAT_XRGB8888;
|
||||
break;
|
||||
case GL_RGBA:
|
||||
case PIXMAN_a8b8g8r8:
|
||||
header.format = WCAP_FORMAT_XBGR8888;
|
||||
break;
|
||||
default:
|
||||
weston_log("unknown recorder format\n");
|
||||
break;
|
||||
}
|
||||
|
||||
header.width = output->current->width;
|
||||
|
Loading…
Reference in New Issue
Block a user