summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2015-07-22 20:17:52 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2015-07-22 20:17:52 +0100
commit19ca856810f25006c982a8f2e5ee4cbc485bb9cd (patch)
tree88706554b2b1d1235f398856da75b98d3829c77e
parent0ad995746a32cce5709d718442c10b3b9ba1edee (diff)
downloadcogl-19ca856810f25006c982a8f2e5ee4cbc485bb9cd.tar.gz
Store XVisualInfo into the Xlib renderer
We want to be able to retrieve the XVisualInfo used when creating the GL context under GLX and EGL-X11, so that we can use the visual before we have an onscreen frame buffer.
-rw-r--r--cogl/cogl-xlib-renderer-private.h2
-rw-r--r--cogl/cogl-xlib-renderer.c17
-rw-r--r--cogl/cogl-xlib-renderer.h4
-rw-r--r--cogl/cogl.symbols1
4 files changed, 24 insertions, 0 deletions
diff --git a/cogl/cogl-xlib-renderer-private.h b/cogl/cogl-xlib-renderer-private.h
index 3c2b6829..ea0ee906 100644
--- a/cogl/cogl-xlib-renderer-private.h
+++ b/cogl/cogl-xlib-renderer-private.h
@@ -48,6 +48,8 @@ typedef struct _CoglXlibRenderer
CoglXlibTrapState *trap_state;
unsigned long outputs_update_serial;
+
+ XVisualInfo *xvisinfo;
} CoglXlibRenderer;
CoglBool
diff --git a/cogl/cogl-xlib-renderer.c b/cogl/cogl-xlib-renderer.c
index 740f1e43..8801c1cb 100644
--- a/cogl/cogl-xlib-renderer.c
+++ b/cogl/cogl-xlib-renderer.c
@@ -58,6 +58,11 @@ static GList *_cogl_xlib_renderers = NULL;
static void
destroy_xlib_renderer_data (void *user_data)
{
+ CoglXlibRenderer *data = user_data;
+
+ if (data->xvisinfo)
+ XFree (data->xvisinfo);
+
g_slice_free (CoglXlibRenderer, user_data);
}
@@ -658,3 +663,15 @@ _cogl_xlib_renderer_output_for_rectangle (CoglRenderer *renderer,
return max_overlapped;
}
+
+XVisualInfo *
+cogl_xlib_renderer_get_visual_info (CoglRenderer *renderer)
+{
+ CoglXlibRenderer *xlib_renderer;
+
+ _COGL_RETURN_VAL_IF_FAIL (cogl_is_renderer (renderer), NULL);
+
+ xlib_renderer = _cogl_xlib_renderer_get_data (renderer);
+
+ return xlib_renderer->xvisinfo;
+}
diff --git a/cogl/cogl-xlib-renderer.h b/cogl/cogl-xlib-renderer.h
index 6318957a..fdce06b0 100644
--- a/cogl/cogl-xlib-renderer.h
+++ b/cogl/cogl-xlib-renderer.h
@@ -34,6 +34,7 @@
#define __COGL_XLIB_RENDERER_H__
#include <X11/Xlib.h>
+#include <X11/Xutil.h>
/* NB: this is a top-level header that can be included directly but we
* want to be careful not to define __COGL_H_INSIDE__ when this is
@@ -169,6 +170,9 @@ cogl_xlib_renderer_set_event_retrieval_enabled (CoglRenderer *renderer,
Display *
cogl_xlib_renderer_get_display (CoglRenderer *renderer);
+XVisualInfo *
+cogl_xlib_renderer_get_visual_info (CoglRenderer *renderer);
+
COGL_END_DECLS
/* The gobject introspection scanner seems to parse public headers in
diff --git a/cogl/cogl.symbols b/cogl/cogl.symbols
index c48314ac..c3b9f5a7 100644
--- a/cogl/cogl.symbols
+++ b/cogl/cogl.symbols
@@ -1063,6 +1063,7 @@ cogl_xlib_handle_event
cogl_xlib_renderer_add_filter
cogl_xlib_renderer_get_display
cogl_xlib_renderer_get_foreign_display
+cogl_xlib_renderer_get_visual_info
cogl_xlib_renderer_handle_event
cogl_xlib_renderer_remove_filter
cogl_xlib_renderer_set_event_retrieval_enabled