aboutsummaryrefslogtreecommitdiff
path: root/include/wlr
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2018-05-25 08:38:44 -0400
committerGitHub <noreply@github.com>2018-05-25 08:38:44 -0400
commit35b31dcfb7f54c08301c4eb352325bb852b1bece (patch)
tree93d550e437722bdeabca5605ada5c0b4d41128cf /include/wlr
parenta0eb37e2ea4ad96b4f6e98fddbc5c31d0bd0f293 (diff)
parent24cf70ae9691d605e4a1f7e9d8dc59ec72401bd0 (diff)
Merge pull request #1000 from ammen99/custom-renderer-initialization
[RFC] backends: implement custom EGL and renderer initialization
Diffstat (limited to 'include/wlr')
-rw-r--r--include/wlr/backend.h10
-rw-r--r--include/wlr/backend/drm.h3
-rw-r--r--include/wlr/backend/headless.h3
-rw-r--r--include/wlr/backend/wayland.h3
-rw-r--r--include/wlr/backend/x11.h2
-rw-r--r--include/wlr/render/wlr_renderer.h4
6 files changed, 20 insertions, 5 deletions
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/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 21f9c16c..ec87201b 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]);