aboutsummaryrefslogtreecommitdiff
path: root/backend/wayland/output.c
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2018-01-21 00:06:35 +0100
committeremersion <contact@emersion.fr>2018-01-21 00:06:35 +0100
commit0365b587f03411d6a55017e111a991d466decc35 (patch)
tree8d4668c9c51e60535b560a3f3e367fc421c9b72b /backend/wayland/output.c
parent78c13ead163e76b1c0ff344eefeadcaeffb3890e (diff)
output: add damage tracking via buffer age
Diffstat (limited to 'backend/wayland/output.c')
-rw-r--r--backend/wayland/output.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/backend/wayland/output.c b/backend/wayland/output.c
index 7e299ecc..5de18d41 100644
--- a/backend/wayland/output.c
+++ b/backend/wayland/output.c
@@ -38,22 +38,27 @@ static bool wlr_wl_output_set_custom_mode(struct wlr_output *_output,
return true;
}
-static void wlr_wl_output_make_current(struct wlr_output *_output) {
- struct wlr_wl_backend_output *output = (struct wlr_wl_backend_output *)_output;
- if (!eglMakeCurrent(output->backend->egl.display,
- output->egl_surface, output->egl_surface,
- output->backend->egl.context)) {
- wlr_log(L_ERROR, "eglMakeCurrent failed: %s", egl_error());
- }
+static bool wlr_wl_output_make_current(struct wlr_output *wlr_output,
+ int *buffer_age) {
+ struct wlr_wl_backend_output *output =
+ (struct wlr_wl_backend_output *)wlr_output;
+ return wlr_egl_make_current(&output->backend->egl, output->egl_surface,
+ buffer_age);
}
-static void wlr_wl_output_swap_buffers(struct wlr_output *_output) {
- struct wlr_wl_backend_output *output = (struct wlr_wl_backend_output *)_output;
+static bool wlr_wl_output_swap_buffers(struct wlr_output *wlr_output) {
+ struct wlr_wl_backend_output *output =
+ (struct wlr_wl_backend_output *)wlr_output;
+
output->frame_callback = wl_surface_frame(output->surface);
wl_callback_add_listener(output->frame_callback, &frame_listener, output);
+
if (!eglSwapBuffers(output->backend->egl.display, output->egl_surface)) {
wlr_log(L_ERROR, "eglSwapBuffers failed: %s", egl_error());
+ return false;
}
+
+ return true;
}
static void wlr_wl_output_transform(struct wlr_output *_output,