1 #ifndef BACKEND_HEADLESS_H
2 #define BACKEND_HEADLESS_H
3 
4 #include <wlr/backend/headless.h>
5 #include <wlr/backend/interface.h>
6 #include <wlr/render/gles2.h>
7 
8 #define HEADLESS_DEFAULT_REFRESH (60 * 1000) // 60 Hz
9 
10 struct wlr_headless_backend {
11 	struct wlr_backend backend;
12 	struct wlr_egl priv_egl; // may be uninitialized
13 	struct wlr_egl *egl;
14 	struct wlr_renderer *renderer;
15 	struct wl_display *display;
16 	struct wl_list outputs;
17 	size_t last_output_num;
18 	struct wl_list input_devices;
19 	struct wl_listener display_destroy;
20 	struct wl_listener renderer_destroy;
21 	bool started;
22 	GLenum internal_format;
23 };
24 
25 struct wlr_headless_output {
26 	struct wlr_output wlr_output;
27 
28 	struct wlr_headless_backend *backend;
29 	struct wl_list link;
30 
31 	GLuint fbo, rbo;
32 
33 	struct wl_event_source *frame_timer;
34 	int frame_delay; // ms
35 };
36 
37 struct wlr_headless_input_device {
38 	struct wlr_input_device wlr_input_device;
39 
40 	struct wlr_headless_backend *backend;
41 };
42 
43 struct wlr_headless_backend *headless_backend_from_backend(
44 	struct wlr_backend *wlr_backend);
45 
46 #endif
47