summaryrefslogtreecommitdiff
path: root/cogl/cogl/cogl-glib-source.c
diff options
context:
space:
mode:
Diffstat (limited to 'cogl/cogl/cogl-glib-source.c')
-rw-r--r--cogl/cogl/cogl-glib-source.c193
1 files changed, 0 insertions, 193 deletions
diff --git a/cogl/cogl/cogl-glib-source.c b/cogl/cogl/cogl-glib-source.c
deleted file mode 100644
index aa86c828d..000000000
--- a/cogl/cogl/cogl-glib-source.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Cogl
- *
- * A Low Level GPU Graphics and Utilities API
- *
- * Copyright (C) 2011 Intel Corporation.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- *
- */
-
-#include "cogl-config.h"
-
-#include "cogl-glib-source.h"
-#include "cogl-poll.h"
-
-typedef struct _CoglGLibSource
-{
- GSource source;
-
- CoglRenderer *renderer;
-
- GArray *poll_fds;
- int poll_fds_age;
-
- int64_t expiration_time;
-} CoglGLibSource;
-
-static gboolean
-cogl_glib_source_prepare (GSource *source, int *timeout)
-{
- CoglGLibSource *cogl_source = (CoglGLibSource *) source;
- CoglPollFD *poll_fds;
- int n_poll_fds;
- int64_t cogl_timeout;
- int age;
- int i;
-
- age = cogl_poll_renderer_get_info (cogl_source->renderer,
- &poll_fds,
- &n_poll_fds,
- &cogl_timeout);
-
- /* We have to be careful not to call g_source_add/remove_poll unless
- * the FDs have changed because it will cause the main loop to
- * immediately wake up. If we call it every time the source is
- * prepared it will effectively never go idle. */
- if (age != cogl_source->poll_fds_age)
- {
- /* Remove any existing polls before adding the new ones */
- for (i = 0; i < cogl_source->poll_fds->len; i++)
- {
- GPollFD *poll_fd = &g_array_index (cogl_source->poll_fds, GPollFD, i);
- g_source_remove_poll (source, poll_fd);
- }
-
- g_array_set_size (cogl_source->poll_fds, n_poll_fds);
-
- for (i = 0; i < n_poll_fds; i++)
- {
- GPollFD *poll_fd = &g_array_index (cogl_source->poll_fds, GPollFD, i);
- poll_fd->fd = poll_fds[i].fd;
- g_source_add_poll (source, poll_fd);
- }
- }
-
- cogl_source->poll_fds_age = age;
-
- /* Update the events */
- for (i = 0; i < n_poll_fds; i++)
- {
- GPollFD *poll_fd = &g_array_index (cogl_source->poll_fds, GPollFD, i);
- poll_fd->events = poll_fds[i].events;
- poll_fd->revents = 0;
- }
-
- if (cogl_timeout == -1)
- {
- *timeout = -1;
- cogl_source->expiration_time = -1;
- }
- else
- {
- /* Round up to ensure that we don't try again too early */
- *timeout = (cogl_timeout + 999) / 1000;
- cogl_source->expiration_time = (g_source_get_time (source) +
- cogl_timeout);
- }
-
- return *timeout == 0;
-}
-
-static gboolean
-cogl_glib_source_check (GSource *source)
-{
- CoglGLibSource *cogl_source = (CoglGLibSource *) source;
- int i;
-
- if (cogl_source->expiration_time >= 0 &&
- g_source_get_time (source) >= cogl_source->expiration_time)
- return TRUE;
-
- for (i = 0; i < cogl_source->poll_fds->len; i++)
- {
- GPollFD *poll_fd = &g_array_index (cogl_source->poll_fds, GPollFD, i);
- if (poll_fd->revents != 0)
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gboolean
-cogl_glib_source_dispatch (GSource *source,
- GSourceFunc callback,
- void *user_data)
-{
- CoglGLibSource *cogl_source = (CoglGLibSource *) source;
- CoglPollFD *poll_fds =
- (CoglPollFD *) &g_array_index (cogl_source->poll_fds, GPollFD, 0);
-
- cogl_poll_renderer_dispatch (cogl_source->renderer,
- poll_fds,
- cogl_source->poll_fds->len);
-
- return TRUE;
-}
-
-static void
-cogl_glib_source_finalize (GSource *source)
-{
- CoglGLibSource *cogl_source = (CoglGLibSource *) source;
-
- g_array_free (cogl_source->poll_fds, TRUE);
-}
-
-static GSourceFuncs
-cogl_glib_source_funcs =
- {
- cogl_glib_source_prepare,
- cogl_glib_source_check,
- cogl_glib_source_dispatch,
- cogl_glib_source_finalize
- };
-
-GSource *
-cogl_glib_renderer_source_new (CoglRenderer *renderer,
- int priority)
-{
- GSource *source;
- CoglGLibSource *cogl_source;
-
- source = g_source_new (&cogl_glib_source_funcs,
- sizeof (CoglGLibSource));
- cogl_source = (CoglGLibSource *) source;
-
- cogl_source->renderer = renderer;
- cogl_source->poll_fds = g_array_new (FALSE, FALSE, sizeof (GPollFD));
-
- if (priority != G_PRIORITY_DEFAULT)
- g_source_set_priority (source, priority);
-
- return source;
-}
-
-GSource *
-cogl_glib_source_new (CoglContext *context,
- int priority)
-{
- return cogl_glib_renderer_source_new (cogl_context_get_renderer (context),
- priority);
-}
-
-