Merge pull request #580 from emersion/screenshooter-renderer-backport

Backport screenshooter fixes from the renderer redesign v1
This commit is contained in:
Tony Crisci 2018-01-29 17:13:23 -05:00 committed by GitHub
commit ed5b1fdedd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 182 additions and 97 deletions

View file

@ -7,6 +7,7 @@
struct wlr_headless_backend {
struct wlr_backend backend;
struct wlr_egl egl;
struct wlr_renderer *renderer;
struct wl_display *display;
struct wl_list outputs;
struct wl_list input_devices;

View file

@ -6,6 +6,7 @@
#include <wayland-server.h>
#include <wayland-egl.h>
#include <wlr/render/egl.h>
#include <wlr/render.h>
#include <wlr/backend/wayland.h>
#include <wlr/types/wlr_box.h>
#include <wayland-util.h>
@ -19,6 +20,7 @@ struct wlr_wl_backend {
struct wl_list devices;
struct wl_list outputs;
struct wlr_egl egl;
struct wlr_renderer *renderer;
size_t requested_outputs;
struct wl_listener local_display_destroy;
/* remote state */

View file

@ -39,6 +39,7 @@ struct wlr_x11_backend {
struct wlr_input_device pointer_dev;
struct wlr_egl egl;
struct wlr_renderer *renderer;
struct wl_event_source *event_source;
struct wl_event_source *frame_timer;

View file

@ -23,6 +23,7 @@ struct wlr_backend *wlr_backend_autocreate(struct wl_display *display);
bool wlr_backend_start(struct wlr_backend *backend);
void wlr_backend_destroy(struct wlr_backend *backend);
struct wlr_egl *wlr_backend_get_egl(struct wlr_backend *backend);
struct wlr_renderer *wlr_backend_get_renderer(struct wlr_backend *backend);
uint32_t usec_to_msec(uint64_t usec);

View file

@ -9,6 +9,7 @@ struct wlr_backend_impl {
bool (*start)(struct wlr_backend *backend);
void (*destroy)(struct wlr_backend *backend);
struct wlr_egl *(*get_egl)(struct wlr_backend *backend);
struct wlr_renderer *(*get_renderer)(struct wlr_backend *backend);
};
void wlr_backend_init(struct wlr_backend *backend,

View file

@ -52,10 +52,17 @@ const enum wl_shm_format *wlr_renderer_get_formats(
bool wlr_renderer_buffer_is_drm(struct wlr_renderer *renderer,
struct wl_resource *buffer);
/**
* Reads pixels and stores them in out_data as ARGB8888.
* Reads out of pixels of the currently bound surface into data. `stride` is in
* bytes.
*/
void wlr_renderer_read_pixels(struct wlr_renderer *r, int x, int y,
int width, int height, void *out_data);
bool wlr_renderer_read_pixels(struct wlr_renderer *r, enum wl_shm_format fmt,
uint32_t stride, uint32_t width, uint32_t height,
uint32_t src_x, uint32_t src_y, uint32_t dst_x, uint32_t dst_y, void *data);
/**
* Checks if a format is supported.
*/
bool wlr_renderer_format_supported(struct wlr_renderer *r,
enum wl_shm_format fmt);
/**
* Destroys this wlr_renderer. Textures must be destroyed separately.
*/

View file

@ -28,8 +28,12 @@ struct wlr_renderer_impl {
struct wlr_renderer *renderer, size_t *len);
bool (*buffer_is_drm)(struct wlr_renderer *renderer,
struct wl_resource *buffer);
void (*read_pixels)(struct wlr_renderer *renderer, int x, int y, int width,
int height, void *out_data);
bool (*read_pixels)(struct wlr_renderer *renderer, enum wl_shm_format fmt,
uint32_t stride, uint32_t width, uint32_t height,
uint32_t src_x, uint32_t src_y, uint32_t dst_x, uint32_t dst_y,
void *data);
bool (*format_supported)(struct wlr_renderer *renderer,
enum wl_shm_format fmt);
void (*destroy)(struct wlr_renderer *renderer);
};

View file

@ -4,7 +4,6 @@
struct wlr_screenshooter {
struct wl_global *wl_global;
struct wlr_renderer *renderer;
struct wl_list screenshots; // wlr_screenshot::link
struct wl_listener display_destroy;
@ -23,8 +22,7 @@ struct wlr_screenshot {
void* data;
};
struct wlr_screenshooter *wlr_screenshooter_create(struct wl_display *display,
struct wlr_renderer *renderer);
struct wlr_screenshooter *wlr_screenshooter_create(struct wl_display *display);
void wlr_screenshooter_destroy(struct wlr_screenshooter *screenshooter);
#endif