[gtk/wip.win32.fixes] Win32: Add EGLDisplay getter




commit 82fe74b9f7b2dd84a94e007edbd906007fac761f
Author: Chun-wei Fan <fanchunwei src gnome org>
Date:   Wed May 12 19:29:05 2021 +0800

    Win32: Add EGLDisplay getter
    
    Like what was done for Wayland and X11, add an API to retrieve the EGLDisplay
    if one is being used in place of WGL.

 gdk/win32/gdkglcontext-win32.c | 32 +++++++++++++++++++++++++++++++-
 gdk/win32/gdkwin32display.h    |  3 +++
 2 files changed, 34 insertions(+), 1 deletion(-)
---
diff --git a/gdk/win32/gdkglcontext-win32.c b/gdk/win32/gdkglcontext-win32.c
index 54781ad484..f57a9d37f2 100644
--- a/gdk/win32/gdkglcontext-win32.c
+++ b/gdk/win32/gdkglcontext-win32.c
@@ -424,7 +424,6 @@ static EGLDisplay
 _gdk_win32_get_egl_display (GdkWin32Display *display)
 {
   EGLDisplay disp;
-  gboolean success = FALSE;
 
   if (epoxy_has_egl_extension (NULL, "EGL_EXT_platform_base"))
     {
@@ -555,6 +554,37 @@ _gdk_win32_display_init_gl (GdkDisplay *display)
   return TRUE;
 }
 
+/**
+ * gdk_win32_display_get_egl_display:
+ * @display: (type GdkWin32Display): a Win32 display
+ *
+ * Retrieves the EGL display connection object for the given GDK display.
+ *
+ * Returns: (nullable): the EGL display
+ */
+gpointer
+gdk_win32_display_get_egl_display (GdkDisplay *display)
+{
+  GdkWin32Display *display_win32;
+
+  g_return_val_if_fail (GDK_IS_WIN32_DISPLAY (display), NULL);
+
+#ifdef GDK_WIN32_ENABLE_EGL
+  if (!_gdk_win32_display_init_gl (display))
+    return NULL;
+
+  display_win32 = GDK_WIN32_DISPLAY (display);
+
+  if (display_win32->have_wgl)
+    return NULL;
+
+  return display_win32->egl_disp;
+#else
+  /* no EGL support */
+  return NULL;
+#endif
+}
+
 /* Setup the legacy context after creating it */
 static gboolean
 _ensure_legacy_gl_context (HDC           hdc,
diff --git a/gdk/win32/gdkwin32display.h b/gdk/win32/gdkwin32display.h
index a91fe3e49d..e9e621eba5 100644
--- a/gdk/win32/gdkwin32display.h
+++ b/gdk/win32/gdkwin32display.h
@@ -104,6 +104,9 @@ void       gdk_win32_display_remove_filter       (GdkWin32Display
 GDK_AVAILABLE_IN_ALL
 GdkMonitor * gdk_win32_display_get_primary_monitor (GdkDisplay *display);
 
+GDK_AVAILABLE_IN_4_4
+gpointer gdk_win32_display_get_egl_display         (GdkDisplay  *display);
+
 
 G_END_DECLS
 


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