[cogl/wip/expose-glx-egl-context: 2/2] Expose WGL context to applications



commit 76e79aa09dfed3cea9aaafbe43b4648f82f1aaa8
Author: Robert Bragg <robert linux intel com>
Date:   Wed Mar 5 15:10:38 2014 +0000

    Expose WGL context to applications
    
    This exposes the WGL HGLRC context handle to applications.
    
    This will enable GStreamer, for example, to be able to create a GL
    context that shares resources with Cogl's context.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=724992

 cogl/Makefile.am              |    1 +
 cogl/cogl-wgl.h               |   98 +++++++++++++++++++++++++++++++++++++++++
 cogl/winsys/cogl-winsys-wgl.c |    8 +++
 3 files changed, 107 insertions(+), 0 deletions(-)
---
diff --git a/cogl/Makefile.am b/cogl/Makefile.am
index 9bc94c1..325a9f0 100644
--- a/cogl/Makefile.am
+++ b/cogl/Makefile.am
@@ -399,6 +399,7 @@ cogl_sources_c += \
 endif
 if SUPPORT_WGL
 cogl_public_h += \
+       $(srcdir)/cogl-wgl.h \
        $(srcdir)/cogl-win32-renderer.h
 
 cogl_sources_c += \
diff --git a/cogl/cogl-wgl.h b/cogl/cogl-wgl.h
new file mode 100644
index 0000000..5e5b922
--- /dev/null
+++ b/cogl/cogl-wgl.h
@@ -0,0 +1,98 @@
+/*
+ * Cogl
+ *
+ * A Low-Level GPU Graphics and Utilities API
+ *
+ * Copyright (C) 2014 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.
+ *
+ *
+ */
+
+#ifndef __COGL_WGL_H__
+#define __COGL_WGL_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
+ * included internally while building Cogl itself since
+ * __COGL_H_INSIDE__ is used in headers to guard public vs private api
+ * definitions
+ */
+#ifndef COGL_COMPILATION
+
+/* Note: When building Cogl .gir we explicitly define
+ * __COGL_WGL_H_INSIDE__ */
+#ifndef __COGL_WGL_H_INSIDE__
+#define __COGL_WGL_H_INSIDE__
+#endif
+
+/* Note: When building Cogl .gir we explicitly define
+ * __COGL_H_INSIDE__ */
+#ifndef __COGL_H_INSIDE__
+#define __COGL_H_INSIDE__
+#define __COGL_MUST_UNDEF_COGL_H_INSIDE__
+#endif
+
+#endif /* COGL_COMPILATION */
+
+
+#include <windows.h>
+#include <cogl/cogl-types.h>
+
+COGL_BEGIN_DECLS
+
+/**
+ * cogl_wgl_context_get_wgl_context:
+ * @context: A #CoglContext pointer
+ *
+ * If you have done a runtime check to determine that Cogl is using
+ * WGL internally then this API can be used to retrieve the HGLRC
+ * context handle that was setup internally. The result is undefined
+ * if Cogl is not using WGL.
+ *
+ * Note: The current window system backend can be checked using
+ * cogl_renderer_get_winsys_id().
+ *
+ * Return value: The internally setup HGLRC context handle.
+ * Since: 1.18
+ * Stability: unstable
+ */
+HGLRC
+cogl_wgl_context_get_wgl_context (CoglContext *context);
+
+COGL_END_DECLS
+
+/* The gobject introspection scanner seems to parse public headers in
+ * isolation which means we need to be extra careful about how we
+ * define and undefine __COGL_H_INSIDE__ used to detect when internal
+ * headers are incorrectly included by developers. In the gobject
+ * introspection case we have to manually define __COGL_H_INSIDE__ as
+ * a commandline argument for the scanner which means we must be
+ * careful not to undefine it in a header...
+ */
+#ifdef __COGL_MUST_UNDEF_COGL_H_INSIDE__
+#undef __COGL_H_INSIDE__
+#undef __COGL_WGL_H_INSIDE__
+#undef __COGL_MUST_UNDEF_COGL_H_INSIDE__
+#endif
+
+#endif /* __COGL_WGL_H__ */
diff --git a/cogl/winsys/cogl-winsys-wgl.c b/cogl/winsys/cogl-winsys-wgl.c
index 004b88c..58e06e9 100644
--- a/cogl/winsys/cogl-winsys-wgl.c
+++ b/cogl/winsys/cogl-winsys-wgl.c
@@ -988,3 +988,11 @@ _cogl_winsys_wgl_get_vtable (void)
 
   return &vtable;
 }
+
+HGLRC
+cogl_wgl_context_get_wgl_context (CoglContext *context)
+{
+  CoglDisplayWgl *display_wgl = context->display->winsys;
+
+  return display_wgl->wgl_context;
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]