[cogl/cogl-1.16] Associate check and dispatch funcs with poll fds
- From: Robert Bragg <rbragg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [cogl/cogl-1.16] Associate check and dispatch funcs with poll fds
- Date: Tue, 30 Apr 2013 16:07:45 +0000 (UTC)
commit 95a41e177a557549ccdc72c006cfc8b155e8b49e
Author: Robert Bragg <robert linux intel com>
Date: Thu Apr 18 16:26:21 2013 +0100
Associate check and dispatch funcs with poll fds
Instead of driving event dispatching through a per winsys poll_dispatch
vfunc its now possible to associate a check and dispatch function with
each file descriptor that is registered for polling. This means we can
remove the winsys get_dispatch_timeout and poll_dispatch vfuncs and it
also makes it easier for more orthogonal internal components to add file
descriptors for polling to the mainloop.
Reviewed-by: Neil Roberts <neil linux intel com>
(cherry picked from commit 627947622df36dd529b9dc60a3ae9e6083532b19)
cogl/cogl-poll-private.h | 8 +-
cogl/cogl-poll.c | 75 +++++++--
cogl/cogl-renderer-private.h | 1 +
cogl/cogl-xlib-renderer-private.h | 5 -
cogl/cogl-xlib-renderer.c | 49 ++++--
cogl/winsys/cogl-winsys-egl-kms.c | 290 ++++++++++++++++-----------------
cogl/winsys/cogl-winsys-egl-wayland.c | 50 ++----
cogl/winsys/cogl-winsys-egl-x11.c | 19 --
cogl/winsys/cogl-winsys-glx.c | 17 --
cogl/winsys/cogl-winsys-private.h | 8 -
10 files changed, 260 insertions(+), 262 deletions(-)
---
diff --git a/cogl/cogl-poll-private.h b/cogl/cogl-poll-private.h
index da1051a..93ef752 100644
--- a/cogl/cogl-poll-private.h
+++ b/cogl/cogl-poll-private.h
@@ -32,10 +32,16 @@
void
_cogl_poll_renderer_remove_fd (CoglRenderer *renderer, int fd);
+typedef CoglBool (*CoglPollCheckCallback) (void *user_data);
+typedef void (*CoglPollDispatchCallback) (void *user_data);
+
void
_cogl_poll_renderer_add_fd (CoglRenderer *renderer,
int fd,
- CoglPollFDEvent events);
+ CoglPollFDEvent events,
+ CoglPollCheckCallback check,
+ CoglPollDispatchCallback dispatch,
+ void *user_data);
typedef void (*CoglIdleCallback) (void *user_data);
diff --git a/cogl/cogl-poll.c b/cogl/cogl-poll.c
index 7abc0e8..1528f2c 100644
--- a/cogl/cogl-poll.c
+++ b/cogl/cogl-poll.c
@@ -33,13 +33,21 @@
#include "cogl-renderer-private.h"
#include "cogl-context-private.h"
+typedef struct _CoglPollSource
+{
+ int fd;
+ CoglPollCheckCallback check;
+ CoglPollDispatchCallback dispatch;
+ void *user_data;
+} CoglPollSource;
+
int
cogl_poll_renderer_get_info (CoglRenderer *renderer,
CoglPollFD **poll_fds,
int *n_poll_fds,
int64_t *timeout)
{
- const CoglWinsysVtable *winsys;
+ GList *l;
_COGL_RETURN_VAL_IF_FAIL (cogl_is_renderer (renderer), 0);
_COGL_RETURN_VAL_IF_FAIL (poll_fds != NULL, 0);
@@ -55,13 +63,17 @@ cogl_poll_renderer_get_info (CoglRenderer *renderer,
return renderer->poll_fds_age;
}
- winsys = renderer->winsys_vtable;
-
- if (winsys->get_dispatch_timeout)
- *timeout = winsys->get_dispatch_timeout (renderer);
- else
- *timeout = -1;
+ for (l = renderer->poll_sources; l; l = l->next)
+ {
+ CoglPollSource *source = l->data;
+ if (source->check && source->check (source->user_data))
+ {
+ *timeout = 0;
+ return renderer->poll_fds_age;
+ }
+ }
+ *timeout = -1;
return renderer->poll_fds_age;
}
@@ -70,16 +82,28 @@ cogl_poll_renderer_dispatch (CoglRenderer *renderer,
const CoglPollFD *poll_fds,
int n_poll_fds)
{
- const CoglWinsysVtable *winsys;
+ GList *l;
_COGL_RETURN_IF_FAIL (cogl_is_renderer (renderer));
_cogl_closure_list_invoke_no_args (&renderer->idle_closures);
- winsys = renderer->winsys_vtable;
-
- if (winsys->poll_dispatch)
- winsys->poll_dispatch (renderer, poll_fds, n_poll_fds);
+ for (l = renderer->poll_sources; l; l = l->next)
+ {
+ CoglPollSource *source = l->data;
+ int i;
+
+ for (i = 0; i < n_poll_fds; i++)
+ {
+ const CoglPollFD *pollfd = &poll_fds[i];
+
+ if (pollfd->fd == source->fd)
+ {
+ source->dispatch (source->user_data);
+ break;
+ }
+ }
+ }
}
static int
@@ -102,26 +126,51 @@ void
_cogl_poll_renderer_remove_fd (CoglRenderer *renderer, int fd)
{
int i = find_pollfd (renderer, fd);
+ GList *l;
if (i < 0)
return;
g_array_remove_index_fast (renderer->poll_fds, i);
renderer->poll_fds_age++;
+
+ for (l = renderer->poll_sources; l; l = l->next)
+ {
+ CoglPollSource *source = l->data;
+ if (source->fd == fd)
+ {
+ renderer->poll_sources =
+ g_list_delete_link (renderer->poll_sources, l);
+ g_slice_free (CoglPollSource, source);
+ break;
+ }
+ }
}
void
_cogl_poll_renderer_add_fd (CoglRenderer *renderer,
int fd,
- CoglPollFDEvent events)
+ CoglPollFDEvent events,
+ CoglPollCheckCallback check,
+ CoglPollDispatchCallback dispatch,
+ void *user_data)
{
CoglPollFD pollfd = {
fd,
events
};
+ CoglPollSource *source;
_cogl_poll_renderer_remove_fd (renderer, fd);
+ source = g_slice_new0 (CoglPollSource);
+ source->fd = fd;
+ source->check = check;
+ source->dispatch = dispatch;
+ source->user_data = user_data;
+
+ renderer->poll_sources = g_list_prepend (renderer->poll_sources, source);
+
g_array_append_val (renderer->poll_fds, pollfd);
renderer->poll_fds_age++;
}
diff --git a/cogl/cogl-renderer-private.h b/cogl/cogl-renderer-private.h
index 476c955..e71e8b9 100644
--- a/cogl/cogl-renderer-private.h
+++ b/cogl/cogl-renderer-private.h
@@ -54,6 +54,7 @@ struct _CoglRenderer
GArray *poll_fds;
int poll_fds_age;
+ GList *poll_sources;
CoglClosureList idle_closures;
diff --git a/cogl/cogl-xlib-renderer-private.h b/cogl/cogl-xlib-renderer-private.h
index cec9cac..6116bd2 100644
--- a/cogl/cogl-xlib-renderer-private.h
+++ b/cogl/cogl-xlib-renderer-private.h
@@ -84,11 +84,6 @@ _cogl_xlib_renderer_get_data (CoglRenderer *renderer);
int64_t
_cogl_xlib_renderer_get_dispatch_timeout (CoglRenderer *renderer);
-void
-_cogl_xlib_renderer_poll_dispatch (CoglRenderer *renderer,
- const CoglPollFD *poll_fds,
- int n_poll_fds);
-
CoglOutput *
_cogl_xlib_renderer_output_for_rectangle (CoglRenderer *renderer,
int x,
diff --git a/cogl/cogl-xlib-renderer.c b/cogl/cogl-xlib-renderer.c
index 09b0def..92f044d 100644
--- a/cogl/cogl-xlib-renderer.c
+++ b/cogl/cogl-xlib-renderer.c
@@ -468,6 +468,32 @@ randr_filter (XEvent *event,
return COGL_FILTER_CONTINUE;
}
+static CoglBool
+check_xlib_events (void *user_data)
+{
+ CoglRenderer *renderer = user_data;
+ CoglXlibRenderer *xlib_renderer = _cogl_xlib_renderer_get_data (renderer);
+
+ return XPending (xlib_renderer->xdpy) ? TRUE : FALSE;
+}
+
+static void
+dispatch_xlib_events (void *user_data)
+{
+ CoglRenderer *renderer = user_data;
+ CoglXlibRenderer *xlib_renderer = _cogl_xlib_renderer_get_data (renderer);
+
+ if (renderer->xlib_enable_event_retrieval)
+ while (XPending (xlib_renderer->xdpy))
+ {
+ XEvent xevent;
+
+ XNextEvent (xlib_renderer->xdpy, &xevent);
+
+ cogl_xlib_renderer_handle_event (renderer, &xevent);
+ }
+}
+
CoglBool
_cogl_xlib_renderer_connect (CoglRenderer *renderer, CoglError **error)
{
@@ -502,7 +528,10 @@ _cogl_xlib_renderer_connect (CoglRenderer *renderer, CoglError **error)
{
_cogl_poll_renderer_add_fd (renderer,
ConnectionNumber (xlib_renderer->xdpy),
- COGL_POLL_FD_EVENT_IN);
+ COGL_POLL_FD_EVENT_IN,
+ check_xlib_events,
+ dispatch_xlib_events,
+ renderer);
}
XRRSelectInput(xlib_renderer->xdpy,
@@ -589,24 +618,6 @@ _cogl_xlib_renderer_get_dispatch_timeout (CoglRenderer *renderer)
return -1;
}
-void
-_cogl_xlib_renderer_poll_dispatch (CoglRenderer *renderer,
- const CoglPollFD *poll_fds,
- int n_poll_fds)
-{
- CoglXlibRenderer *xlib_renderer = _cogl_xlib_renderer_get_data (renderer);
-
- if (renderer->xlib_enable_event_retrieval)
- while (XPending (xlib_renderer->xdpy))
- {
- XEvent xevent;
-
- XNextEvent (xlib_renderer->xdpy, &xevent);
-
- cogl_xlib_renderer_handle_event (renderer, &xevent);
- }
-}
-
CoglOutput *
_cogl_xlib_renderer_output_for_rectangle (CoglRenderer *renderer,
int x,
diff --git a/cogl/winsys/cogl-winsys-egl-kms.c b/cogl/winsys/cogl-winsys-egl-kms.c
index 7873654..a2ec7b9 100644
--- a/cogl/winsys/cogl-winsys-egl-kms.c
+++ b/cogl/winsys/cogl-winsys-egl-kms.c
@@ -114,6 +114,143 @@ _cogl_winsys_renderer_disconnect (CoglRenderer *renderer)
g_slice_free (CoglRendererEGL, egl_renderer);
}
+static void
+flush_pending_swap_notify_cb (void *data,
+ void *user_data)
+{
+ CoglFramebuffer *framebuffer = data;
+
+ if (framebuffer->type == COGL_FRAMEBUFFER_TYPE_ONSCREEN)
+ {
+ CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
+ CoglOnscreenEGL *egl_onscreen = onscreen->winsys;
+ CoglOnscreenKMS *kms_onscreen = egl_onscreen->platform;
+
+ if (kms_onscreen->pending_swap_notify)
+ {
+ CoglFrameInfo *info = g_queue_pop_head (&onscreen->pending_frame_infos);
+
+ _cogl_onscreen_notify_frame_sync (onscreen, info);
+ _cogl_onscreen_notify_complete (onscreen, info);
+ kms_onscreen->pending_swap_notify = FALSE;
+
+ cogl_object_unref (info);
+ }
+ }
+}
+
+static void
+flush_pending_swap_notify_idle (void *user_data)
+{
+ CoglContext *context = user_data;
+ CoglRendererEGL *egl_renderer = context->display->renderer->winsys;
+ CoglRendererKMS *kms_renderer = egl_renderer->platform;
+
+ /* This needs to be disconnected before invoking the callbacks in
+ * case the callbacks cause it to be queued again */
+ _cogl_closure_disconnect (kms_renderer->swap_notify_idle);
+ kms_renderer->swap_notify_idle = NULL;
+
+ g_list_foreach (context->framebuffers,
+ flush_pending_swap_notify_cb,
+ NULL);
+}
+
+static void
+free_current_bo (CoglOnscreen *onscreen)
+{
+ CoglOnscreenEGL *egl_onscreen = onscreen->winsys;
+ CoglOnscreenKMS *kms_onscreen = egl_onscreen->platform;
+ CoglContext *context = COGL_FRAMEBUFFER (onscreen)->context;
+ CoglRenderer *renderer = context->display->renderer;
+ CoglRendererEGL *egl_renderer = renderer->winsys;
+ CoglRendererKMS *kms_renderer = egl_renderer->platform;
+
+ if (kms_onscreen->current_fb_id)
+ {
+ drmModeRmFB (kms_renderer->fd,
+ kms_onscreen->current_fb_id);
+ kms_onscreen->current_fb_id = 0;
+ }
+ if (kms_onscreen->current_bo)
+ {
+ gbm_surface_release_buffer (kms_onscreen->surface,
+ kms_onscreen->current_bo);
+ kms_onscreen->current_bo = NULL;
+ }
+}
+
+static void
+page_flip_handler (int fd,
+ unsigned int frame,
+ unsigned int sec,
+ unsigned int usec,
+ void *data)
+{
+ CoglFlipKMS *flip = data;
+
+ /* We're only ready to dispatch a swap notification once all outputs
+ * have flipped... */
+ flip->pending--;
+ if (flip->pending == 0)
+ {
+ CoglOnscreen *onscreen = flip->onscreen;
+ CoglOnscreenEGL *egl_onscreen = onscreen->winsys;
+ CoglOnscreenKMS *kms_onscreen = egl_onscreen->platform;
+ CoglContext *context = COGL_FRAMEBUFFER (onscreen)->context;
+ CoglRenderer *renderer = context->display->renderer;
+ CoglRendererEGL *egl_renderer = renderer->winsys;
+ CoglRendererKMS *kms_renderer = egl_renderer->platform;
+
+ /* We only want to notify that the swap is complete when the
+ * application calls cogl_context_dispatch so instead of
+ * immediately notifying we queue an idle callback */
+ if (!kms_renderer->swap_notify_idle)
+ {
+ kms_renderer->swap_notify_idle =
+ _cogl_poll_renderer_add_idle (renderer,
+ flush_pending_swap_notify_idle,
+ context,
+ NULL);
+ }
+
+ kms_onscreen->pending_swap_notify = TRUE;
+
+ free_current_bo (onscreen);
+
+ kms_onscreen->current_fb_id = kms_onscreen->next_fb_id;
+ kms_onscreen->next_fb_id = 0;
+
+ kms_onscreen->current_bo = kms_onscreen->next_bo;
+ kms_onscreen->next_bo = NULL;
+
+ cogl_object_unref (flip->onscreen);
+
+ g_slice_free (CoglFlipKMS, flip);
+ }
+}
+
+static void
+handle_drm_event (CoglRendererKMS *kms_renderer)
+{
+ drmEventContext evctx;
+
+ memset (&evctx, 0, sizeof evctx);
+ evctx.version = DRM_EVENT_CONTEXT_VERSION;
+ evctx.page_flip_handler = page_flip_handler;
+ drmHandleEvent (kms_renderer->fd, &evctx);
+}
+
+static void
+dispatch_kms_events (void *user_data)
+{
+ CoglRenderer *renderer = user_data;
+ CoglRendererEGL *egl_renderer = renderer->winsys;
+ CoglRendererKMS *kms_renderer = egl_renderer->platform;
+
+ handle_drm_event (kms_renderer);
+}
+
static CoglBool
_cogl_winsys_renderer_connect (CoglRenderer *renderer,
CoglError **error)
@@ -161,7 +298,10 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
_cogl_poll_renderer_add_fd (renderer,
kms_renderer->fd,
- COGL_POLL_FD_EVENT_IN);
+ COGL_POLL_FD_EVENT_IN,
+ NULL, /* no check callback */
+ dispatch_kms_events,
+ renderer);
return TRUE;
@@ -579,133 +719,6 @@ _cogl_winsys_egl_cleanup_context (CoglDisplay *display)
}
static void
-free_current_bo (CoglOnscreen *onscreen)
-{
- CoglOnscreenEGL *egl_onscreen = onscreen->winsys;
- CoglOnscreenKMS *kms_onscreen = egl_onscreen->platform;
- CoglContext *context = COGL_FRAMEBUFFER (onscreen)->context;
- CoglRenderer *renderer = context->display->renderer;
- CoglRendererEGL *egl_renderer = renderer->winsys;
- CoglRendererKMS *kms_renderer = egl_renderer->platform;
-
- if (kms_onscreen->current_fb_id)
- {
- drmModeRmFB (kms_renderer->fd,
- kms_onscreen->current_fb_id);
- kms_onscreen->current_fb_id = 0;
- }
- if (kms_onscreen->current_bo)
- {
- gbm_surface_release_buffer (kms_onscreen->surface,
- kms_onscreen->current_bo);
- kms_onscreen->current_bo = NULL;
- }
-}
-
-static void
-flush_pending_swap_notify_cb (void *data,
- void *user_data)
-{
- CoglFramebuffer *framebuffer = data;
-
- if (framebuffer->type == COGL_FRAMEBUFFER_TYPE_ONSCREEN)
- {
- CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
- CoglOnscreenEGL *egl_onscreen = onscreen->winsys;
- CoglOnscreenKMS *kms_onscreen = egl_onscreen->platform;
-
- if (kms_onscreen->pending_swap_notify)
- {
- CoglFrameInfo *info = g_queue_pop_head (&onscreen->pending_frame_infos);
-
- _cogl_onscreen_notify_frame_sync (onscreen, info);
- _cogl_onscreen_notify_complete (onscreen, info);
- kms_onscreen->pending_swap_notify = FALSE;
-
- cogl_object_unref (info);
- }
- }
-}
-
-static void
-flush_pending_swap_notify_idle (void *user_data)
-{
- CoglContext *context = user_data;
- CoglRendererEGL *egl_renderer = context->display->renderer->winsys;
- CoglRendererKMS *kms_renderer = egl_renderer->platform;
-
- /* This needs to be disconnected before invoking the callbacks in
- * case the callbacks cause it to be queued again */
- _cogl_closure_disconnect (kms_renderer->swap_notify_idle);
- kms_renderer->swap_notify_idle = NULL;
-
- g_list_foreach (context->framebuffers,
- flush_pending_swap_notify_cb,
- NULL);
-}
-
-static void
-page_flip_handler (int fd,
- unsigned int frame,
- unsigned int sec,
- unsigned int usec,
- void *data)
-{
- CoglFlipKMS *flip = data;
-
- /* We're only ready to dispatch a swap notification once all outputs
- * have flipped... */
- flip->pending--;
- if (flip->pending == 0)
- {
- CoglOnscreen *onscreen = flip->onscreen;
- CoglOnscreenEGL *egl_onscreen = onscreen->winsys;
- CoglOnscreenKMS *kms_onscreen = egl_onscreen->platform;
- CoglContext *context = COGL_FRAMEBUFFER (onscreen)->context;
- CoglRenderer *renderer = context->display->renderer;
- CoglRendererEGL *egl_renderer = renderer->winsys;
- CoglRendererKMS *kms_renderer = egl_renderer->platform;
-
- /* We only want to notify that the swap is complete when the
- * application calls cogl_context_dispatch so instead of
- * immediately notifying we queue an idle callback */
- if (!kms_renderer->swap_notify_idle)
- {
- kms_renderer->swap_notify_idle =
- _cogl_poll_renderer_add_idle (renderer,
- flush_pending_swap_notify_idle,
- context,
- NULL);
- }
-
- kms_onscreen->pending_swap_notify = TRUE;
-
- free_current_bo (onscreen);
-
- kms_onscreen->current_fb_id = kms_onscreen->next_fb_id;
- kms_onscreen->next_fb_id = 0;
-
- kms_onscreen->current_bo = kms_onscreen->next_bo;
- kms_onscreen->next_bo = NULL;
-
- cogl_object_unref (flip->onscreen);
-
- g_slice_free (CoglFlipKMS, flip);
- }
-}
-
-static void
-handle_drm_event (CoglRendererKMS *kms_renderer)
-{
- drmEventContext evctx;
-
- memset (&evctx, 0, sizeof evctx);
- evctx.version = DRM_EVENT_CONTEXT_VERSION;
- evctx.page_flip_handler = page_flip_handler;
- drmHandleEvent (kms_renderer->fd, &evctx);
-}
-
-static void
_cogl_winsys_onscreen_swap_buffers (CoglOnscreen *onscreen)
{
CoglContext *context = COGL_FRAMEBUFFER (onscreen)->context;
@@ -915,25 +928,6 @@ _cogl_winsys_onscreen_deinit (CoglOnscreen *onscreen)
onscreen->winsys = NULL;
}
-static void
-_cogl_winsys_poll_dispatch (CoglRenderer *renderer,
- const CoglPollFD *poll_fds,
- int n_poll_fds)
-{
- CoglRendererEGL *egl_renderer = renderer->winsys;
- CoglRendererKMS *kms_renderer = egl_renderer->platform;
- int i;
-
- for (i = 0; i < n_poll_fds; i++)
- if (poll_fds[i].fd == kms_renderer->fd)
- {
- if (poll_fds[i].revents)
- handle_drm_event (kms_renderer);
-
- break;
- }
-}
-
static const CoglWinsysEGLVtable
_cogl_winsys_egl_vtable =
{
@@ -971,8 +965,6 @@ _cogl_winsys_egl_kms_get_vtable (void)
vtable.onscreen_swap_region = NULL;
vtable.onscreen_swap_buffers = _cogl_winsys_onscreen_swap_buffers;
- vtable.poll_dispatch = _cogl_winsys_poll_dispatch;
-
vtable_inited = TRUE;
}
diff --git a/cogl/winsys/cogl-winsys-egl-wayland.c b/cogl/winsys/cogl-winsys-egl-wayland.c
index 9650089..4fc6b88 100644
--- a/cogl/winsys/cogl-winsys-egl-wayland.c
+++ b/cogl/winsys/cogl-winsys-egl-wayland.c
@@ -39,6 +39,7 @@
#include "cogl-onscreen-private.h"
#include "cogl-wayland-renderer.h"
#include "cogl-error-private.h"
+#include "cogl-poll-private.h"
static const CoglWinsysEGLVtable _cogl_winsys_egl_vtable;
@@ -50,7 +51,7 @@ typedef struct _CoglRendererWayland
struct wl_compositor *wayland_compositor;
struct wl_shell *wayland_shell;
struct wl_registry *wayland_registry;
- CoglPollFD poll_fd;
+ int fd;
} CoglRendererWayland;
typedef struct _CoglDisplayWayland
@@ -108,6 +109,16 @@ static const struct wl_registry_listener registry_listener = {
registry_handle_global_cb,
};
+static void
+dispatch_wayland_display_events (void *user_data)
+{
+ CoglRenderer *renderer = user_data;
+ CoglRendererEGL *egl_renderer = renderer->winsys;
+ CoglRendererWayland *wayland_renderer = egl_renderer->platform;
+
+ wl_display_dispatch (wayland_renderer->wayland_display);
+}
+
static CoglBool
_cogl_winsys_renderer_connect (CoglRenderer *renderer,
CoglError **error)
@@ -176,9 +187,13 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
if (!_cogl_winsys_egl_renderer_connect_common (renderer, error))
goto error;
- wayland_renderer->poll_fd.fd =
- wl_display_get_fd(wayland_renderer->wayland_display);
- wayland_renderer->poll_fd.events = COGL_POLL_FD_EVENT_IN;
+ wayland_renderer->fd = wl_display_get_fd(wayland_renderer->wayland_display);
+ _cogl_poll_renderer_add_fd (renderer,
+ wayland_renderer->fd,
+ COGL_POLL_FD_EVENT_IN,
+ NULL, /* no check callback */
+ dispatch_wayland_display_events,
+ renderer);
return TRUE;
@@ -601,30 +616,6 @@ cogl_wayland_onscreen_resize (CoglOnscreen *onscreen,
_cogl_framebuffer_winsys_update_size (fb, width, height);
}
-static int64_t
-_cogl_winsys_get_dispatch_timeout (CoglRenderer *renderer)
-{
- return -1;
-}
-
-static void
-_cogl_winsys_poll_dispatch (CoglRenderer *renderer,
- const CoglPollFD *poll_fds,
- int n_poll_fds)
-{
- CoglRendererEGL *egl_renderer = renderer->winsys;
- CoglRendererWayland *wayland_renderer = egl_renderer->platform;
- int i;
-
- for (i = 0; i < n_poll_fds; i++)
- if (poll_fds[i].fd == wayland_renderer->poll_fd.fd)
- {
- if (poll_fds[i].revents & COGL_POLL_FD_EVENT_IN)
- wl_display_dispatch (wayland_renderer->wayland_display);
- break;
- }
-}
-
static const CoglWinsysEGLVtable
_cogl_winsys_egl_vtable =
{
@@ -659,9 +650,6 @@ _cogl_winsys_egl_wayland_get_vtable (void)
vtable.onscreen_swap_buffers = _cogl_winsys_onscreen_swap_buffers;
- vtable.get_dispatch_timeout = _cogl_winsys_get_dispatch_timeout;
- vtable.poll_dispatch = _cogl_winsys_poll_dispatch;
-
vtable_inited = TRUE;
}
diff --git a/cogl/winsys/cogl-winsys-egl-x11.c b/cogl/winsys/cogl-winsys-egl-x11.c
index 7ec0681..bdb3759 100644
--- a/cogl/winsys/cogl-winsys-egl-x11.c
+++ b/cogl/winsys/cogl-winsys-egl-x11.c
@@ -668,22 +668,6 @@ _cogl_winsys_xlib_get_visual_info (void)
return get_visual_info (ctx->display, egl_display->egl_config);
}
-static int64_t
-_cogl_winsys_get_dispatch_timeout (CoglRenderer *renderer)
-{
- return _cogl_xlib_renderer_get_dispatch_timeout (renderer);
-}
-
-static void
-_cogl_winsys_poll_dispatch (CoglRenderer *renderer,
- const CoglPollFD *poll_fds,
- int n_poll_fds)
-{
- _cogl_xlib_renderer_poll_dispatch (renderer,
- poll_fds,
- n_poll_fds);
-}
-
#ifdef EGL_KHR_image_pixmap
static CoglBool
@@ -830,9 +814,6 @@ _cogl_winsys_egl_xlib_get_vtable (void)
vtable.xlib_get_visual_info = _cogl_winsys_xlib_get_visual_info;
- vtable.get_dispatch_timeout = _cogl_winsys_get_dispatch_timeout;
- vtable.poll_dispatch = _cogl_winsys_poll_dispatch;
-
#ifdef EGL_KHR_image_pixmap
/* X11 tfp support... */
/* XXX: instead of having a rather monolithic winsys vtable we could
diff --git a/cogl/winsys/cogl-winsys-glx.c b/cogl/winsys/cogl-winsys-glx.c
index 8b465c9..eb4aff6 100644
--- a/cogl/winsys/cogl-winsys-glx.c
+++ b/cogl/winsys/cogl-winsys-glx.c
@@ -2603,20 +2603,6 @@ _cogl_winsys_texture_pixmap_x11_get_texture (CoglTexturePixmapX11 *tex_pixmap)
return glx_tex_pixmap->glx_tex;
}
-static int64_t
-_cogl_winsys_get_dispatch_timeout (CoglRenderer *renderer)
-{
- return _cogl_xlib_renderer_get_dispatch_timeout (renderer);
-}
-
-static void
-_cogl_winsys_poll_dispatch (CoglRenderer *renderer,
- const CoglPollFD *poll_fds,
- int n_poll_fds)
-{
- _cogl_xlib_renderer_poll_dispatch (renderer, poll_fds, n_poll_fds);
-}
-
static CoglWinsysVtable _cogl_winsys_vtable =
{
.id = COGL_WINSYS_ID_GLX,
@@ -2648,9 +2634,6 @@ static CoglWinsysVtable _cogl_winsys_vtable =
.onscreen_set_resizable =
_cogl_winsys_onscreen_set_resizable,
- .get_dispatch_timeout = _cogl_winsys_get_dispatch_timeout,
- .poll_dispatch = _cogl_winsys_poll_dispatch,
-
/* X11 tfp support... */
/* XXX: instead of having a rather monolithic winsys vtable we could
* perhaps look for a way to separate these... */
diff --git a/cogl/winsys/cogl-winsys-private.h b/cogl/winsys/cogl-winsys-private.h
index 880aae5..b7c727e 100644
--- a/cogl/winsys/cogl-winsys-private.h
+++ b/cogl/winsys/cogl-winsys-private.h
@@ -154,14 +154,6 @@ typedef struct _CoglWinsysVtable
(*onscreen_win32_get_window) (CoglOnscreen *onscreen);
#endif
- int64_t
- (*get_dispatch_timeout) (CoglRenderer *renderer);
-
- void
- (*poll_dispatch) (CoglRenderer *renderer,
- const CoglPollFD *poll_fds,
- int n_poll_fds);
-
#ifdef COGL_HAS_XLIB_SUPPORT
CoglBool
(*texture_pixmap_x11_create) (CoglTexturePixmapX11 *tex_pixmap);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]