summaryrefslogtreecommitdiffstats
path: root/video/out/gl_wayland.c
diff options
context:
space:
mode:
Diffstat (limited to 'video/out/gl_wayland.c')
-rw-r--r--video/out/gl_wayland.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/video/out/gl_wayland.c b/video/out/gl_wayland.c
index e13314f531..ddc12c2486 100644
--- a/video/out/gl_wayland.c
+++ b/video/out/gl_wayland.c
@@ -196,12 +196,40 @@ static void releaseGlContext_wayland(MPGLContext *ctx)
wl->egl_context.egl.ctx = NULL;
}
-static void swapGlBuffers_wayland(MPGLContext *ctx)
+static const struct wl_callback_listener frame_listener;
+
+static void frame_handle_redraw(void *data,
+ struct wl_callback *callback,
+ uint32_t time)
+
{
+ MPGLContext *ctx = data;
struct vo_wayland_state *wl = ctx->vo->wayland;
+
+ if (callback)
+ wl_callback_destroy(callback);
+
+ //struct wl_callback *tmp = wl_surface_frame(wl->window.surface);
+ //wl_callback_add_listener(tmp, &frame_listener, ctx);
+ wl->egl_context.redraw_callback = wl_surface_frame(wl->window.surface);
+ wl_callback_add_listener(wl->egl_context.redraw_callback, &frame_listener, ctx);
+
eglSwapBuffers(wl->egl_context.egl.dpy, wl->egl_context.egl_surface);
}
+static const struct wl_callback_listener frame_listener = {
+ frame_handle_redraw
+};
+
+static void swapGlBuffers_wayland(MPGLContext *ctx)
+{
+ struct vo_wayland_state *wl = ctx->vo->wayland;
+// eglSwapBuffers(wl->egl_context.egl.dpy, wl->egl_context.egl_surface);
+
+ if (!wl->egl_context.redraw_callback)
+ frame_handle_redraw(ctx, NULL, 0);
+}
+
static int control(struct vo *vo, int *events, int request, void *data)
{
struct vo_wayland_state *wl = vo->wayland;