52 void listen(zwlr_screencopy_manager_v1 *screencopy_manager, zwp_linux_dmabuf_v1 *dmabuf_interface, wl_output *output,
bool blend_cursor =
false);
53 static void buffer_params_created(
void *data,
struct zwp_linux_buffer_params_v1 *params,
struct wl_buffer *wl_buffer);
54 static void buffer_params_failed(
void *data,
struct zwp_linux_buffer_params_v1 *params);
55 void buffer(zwlr_screencopy_frame_v1 *frame, std::uint32_t format, std::uint32_t width, std::uint32_t height, std::uint32_t stride);
56 void linux_dmabuf(zwlr_screencopy_frame_v1 *frame, std::uint32_t format, std::uint32_t width, std::uint32_t height);
57 void buffer_done(zwlr_screencopy_frame_v1 *frame);
58 void flags(zwlr_screencopy_frame_v1 *frame, std::uint32_t flags);
59 void damage(zwlr_screencopy_frame_v1 *frame, std::uint32_t x, std::uint32_t y, std::uint32_t width, std::uint32_t height);
60 void ready(zwlr_screencopy_frame_v1 *frame, std::uint32_t tv_sec_hi, std::uint32_t tv_sec_lo, std::uint32_t tv_nsec);
61 void failed(zwlr_screencopy_frame_v1 *frame);
64 return current_frame == &frames[0] ? &frames[1] : &frames[0];
68 std::array<frame_t, 2> frames;
70 zwlr_screencopy_frame_v1_listener listener;
75 void create_and_copy_dmabuf(zwlr_screencopy_frame_v1 *frame);
77 zwp_linux_dmabuf_v1 *dmabuf_interface {
nullptr};
80 bool supported {
false};
88 bool supported {
false};
94 struct gbm_device *gbm_device {
nullptr};
95 struct gbm_bo *current_bo {
nullptr};
96 struct wl_buffer *current_wl_buffer {
nullptr};
97 bool y_invert {
false};
109 void listen(zxdg_output_manager_v1 *output_manager);
110 void xdg_name(zxdg_output_v1 *,
const char *name);
111 void xdg_description(zxdg_output_v1 *,
const char *description);
112 void xdg_position(zxdg_output_v1 *, std::int32_t x, std::int32_t y);
113 void xdg_size(zxdg_output_v1 *, std::int32_t width, std::int32_t height);
115 void xdg_done(zxdg_output_v1 *) {}
117 void wl_geometry(wl_output *wl_output, std::int32_t x, std::int32_t y, std::int32_t physical_width, std::int32_t physical_height, std::int32_t subpixel,
const char *make,
const char *model, std::int32_t transform) {}
119 void wl_mode(wl_output *wl_output, std::uint32_t flags, std::int32_t width, std::int32_t height, std::int32_t refresh);
121 void wl_done(wl_output *wl_output) {}
123 void wl_scale(wl_output *wl_output, std::int32_t factor) {}
127 std::string description;
129 wl_output_listener wl_listener;
130 zxdg_output_v1_listener xdg_listener;
136 std::uint32_t version;
154 void listen(wl_registry *registry);
157 return interface[bit];
160 std::vector<std::unique_ptr<monitor_t>> monitors;
161 zwlr_screencopy_manager_v1 *screencopy_manager {
nullptr};
162 zwp_linux_dmabuf_v1 *dmabuf_interface {
nullptr};
163 zxdg_output_manager_v1 *output_manager {
nullptr};
166 void add_interface(wl_registry *registry, std::uint32_t
id,
const char *interface, std::uint32_t version);
167 void del_interface(wl_registry *registry, uint32_t
id);
169 std::bitset<MAX_INTERFACES> interface;
170 wl_registry_listener listener;
int init(const char *display_name=nullptr)
Initialize display. If display_name == nullptr -> display_name = std::getenv("WAYLAND_DISPLAY")
Definition wayland.cpp:51
bool dispatch(std::chrono::milliseconds timeout)
Waits up to the specified timeout to dispatch new events on the wl_display.
Definition wayland.cpp:81
std::unique_ptr< platf::deinit_t > init(const std::filesystem::path &persistence_filepath, const config::video_t &video_config)
Initialize the implementation and perform the initial state recovery (if needed).
Definition display_device.cpp:704