diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/backend/drm/renderer.h | 3 | ||||
-rw-r--r-- | include/wlr/backend.h | 10 | ||||
-rw-r--r-- | include/wlr/backend/drm.h | 3 | ||||
-rw-r--r-- | include/wlr/backend/headless.h | 3 | ||||
-rw-r--r-- | include/wlr/backend/multi.h | 2 | ||||
-rw-r--r-- | include/wlr/backend/wayland.h | 3 | ||||
-rw-r--r-- | include/wlr/backend/x11.h | 2 | ||||
-rw-r--r-- | include/wlr/render/wlr_renderer.h | 4 |
8 files changed, 23 insertions, 7 deletions
diff --git a/include/backend/drm/renderer.h b/include/backend/drm/renderer.h index 5e15f3d5..510abe43 100644 --- a/include/backend/drm/renderer.h +++ b/include/backend/drm/renderer.h @@ -5,6 +5,7 @@ #include <gbm.h> #include <stdbool.h> #include <stdint.h> +#include <wlr/backend.h> #include <wlr/render/wlr_renderer.h> struct wlr_drm_backend; @@ -32,7 +33,7 @@ struct wlr_drm_surface { }; bool init_drm_renderer(struct wlr_drm_backend *drm, - struct wlr_drm_renderer *renderer); + struct wlr_drm_renderer *renderer, wlr_renderer_create_func_t create_render); void finish_drm_renderer(struct wlr_drm_renderer *renderer); bool init_drm_surface(struct wlr_drm_surface *surf, diff --git a/include/wlr/backend.h b/include/wlr/backend.h index 2059e3b7..f40f5353 100644 --- a/include/wlr/backend.h +++ b/include/wlr/backend.h @@ -20,12 +20,20 @@ struct wlr_backend { } events; }; +typedef struct wlr_renderer *(*wlr_renderer_create_func_t)(struct wlr_egl *egl, EGLenum platform, + void *remote_display, EGLint *config_attribs, EGLint visual_id); /** * Automatically initializes the most suitable backend given the environment. * Will always return a multibackend. The backend is created but not started. * Returns NULL on failure. + * + * The compositor can request to initialize the backend's renderer by setting + * the create_render_func. The callback must initialize the given wlr_egl and + * return a valid wlr_renderer, or NULL if it has failed to initiaze it. + * Pass NULL as create_renderer_func to use the backend's default renderer. */ -struct wlr_backend *wlr_backend_autocreate(struct wl_display *display); +struct wlr_backend *wlr_backend_autocreate(struct wl_display *display, + wlr_renderer_create_func_t create_renderer_func); /** * Start the backend. This may signal new_input or new_output immediately, but * may also wait until the display's event loop begins. Returns false on diff --git a/include/wlr/backend/drm.h b/include/wlr/backend/drm.h index 14fafe10..7f41ca15 100644 --- a/include/wlr/backend/drm.h +++ b/include/wlr/backend/drm.h @@ -14,7 +14,8 @@ * a DRM backend, other kinds of backends raise SIGABRT). */ struct wlr_backend *wlr_drm_backend_create(struct wl_display *display, - struct wlr_session *session, int gpu_fd, struct wlr_backend *parent); + struct wlr_session *session, int gpu_fd, struct wlr_backend *parent, + wlr_renderer_create_func_t create_renderer_func); bool wlr_backend_is_drm(struct wlr_backend *backend); bool wlr_output_is_drm(struct wlr_output *output); diff --git a/include/wlr/backend/headless.h b/include/wlr/backend/headless.h index ee784a0d..02c7cd11 100644 --- a/include/wlr/backend/headless.h +++ b/include/wlr/backend/headless.h @@ -9,7 +9,8 @@ * Creates a headless backend. A headless backend has no outputs or inputs by * default. */ -struct wlr_backend *wlr_headless_backend_create(struct wl_display *display); +struct wlr_backend *wlr_headless_backend_create(struct wl_display *display, + wlr_renderer_create_func_t create_renderer_func); /** * Create a new headless output backed by an in-memory EGL framebuffer. You can * read pixels from this framebuffer via wlr_renderer_read_pixels but it is diff --git a/include/wlr/backend/multi.h b/include/wlr/backend/multi.h index 842eed67..1e04dba4 100644 --- a/include/wlr/backend/multi.h +++ b/include/wlr/backend/multi.h @@ -13,7 +13,7 @@ struct wlr_backend *wlr_multi_backend_create(struct wl_display *display); * Adds the given backend to the multi backend. This should be done before the * new backend is started. */ -void wlr_multi_backend_add(struct wlr_backend *multi, +bool wlr_multi_backend_add(struct wlr_backend *multi, struct wlr_backend *backend); void wlr_multi_backend_remove(struct wlr_backend *multi, diff --git a/include/wlr/backend/wayland.h b/include/wlr/backend/wayland.h index 31a14c97..119ea247 100644 --- a/include/wlr/backend/wayland.h +++ b/include/wlr/backend/wayland.h @@ -16,7 +16,8 @@ * to NULL for the default behaviour (WAYLAND_DISPLAY env variable or wayland-0 * default) */ -struct wlr_backend *wlr_wl_backend_create(struct wl_display *display, const char *remote); +struct wlr_backend *wlr_wl_backend_create(struct wl_display *display, const char *remote, + wlr_renderer_create_func_t create_renderer_func); /** * Adds a new output to this backend. You may remove outputs by destroying them. diff --git a/include/wlr/backend/x11.h b/include/wlr/backend/x11.h index 7bc1f891..56360bf7 100644 --- a/include/wlr/backend/x11.h +++ b/include/wlr/backend/x11.h @@ -8,7 +8,7 @@ #include <wlr/types/wlr_output.h> struct wlr_backend *wlr_x11_backend_create(struct wl_display *display, - const char *x11_display); + const char *x11_display, wlr_renderer_create_func_t create_renderer_func); struct wlr_output *wlr_x11_output_create(struct wlr_backend *backend); bool wlr_backend_is_x11(struct wlr_backend *backend); diff --git a/include/wlr/render/wlr_renderer.h b/include/wlr/render/wlr_renderer.h index 93b76195..039bb66e 100644 --- a/include/wlr/render/wlr_renderer.h +++ b/include/wlr/render/wlr_renderer.h @@ -3,6 +3,7 @@ #include <stdint.h> #include <wayland-server-protocol.h> +#include <wlr/render/egl.h> #include <wlr/render/wlr_texture.h> #include <wlr/types/wlr_box.h> @@ -16,6 +17,9 @@ struct wlr_renderer { } events; }; +struct wlr_renderer *wlr_renderer_autocreate(struct wlr_egl *egl, EGLenum platform, + void *remote_display, EGLint *config_attribs, EGLint visual_id); + void wlr_renderer_begin(struct wlr_renderer *r, int width, int height); void wlr_renderer_end(struct wlr_renderer *r); void wlr_renderer_clear(struct wlr_renderer *r, const float color[static 4]); |