mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-11-02 09:01:38 -05:00
Merge pull request #580 from emersion/screenshooter-renderer-backport
Backport screenshooter fixes from the renderer redesign v1
This commit is contained in:
commit
ed5b1fdedd
21 changed files with 182 additions and 97 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue