From 8c1e98b09ccbb6a8e516c912aaf66958563f498f Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Thu, 13 Jul 2023 22:04:35 +0200 Subject: [PATCH] GLSurfaceView: fix eglGetDisplay for Wayland only sessions EGL_DEFAULT_DISPLAY always tries to use X11 --- .../widgets/android_opengl_GLSurfaceView.c | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/api-impl-jni/widgets/android_opengl_GLSurfaceView.c b/src/api-impl-jni/widgets/android_opengl_GLSurfaceView.c index 7e68f90f..c16a30fe 100644 --- a/src/api-impl-jni/widgets/android_opengl_GLSurfaceView.c +++ b/src/api-impl-jni/widgets/android_opengl_GLSurfaceView.c @@ -8,6 +8,9 @@ #include #include +#ifdef GDK_WINDOWING_WAYLAND +#include +#endif #include "../defines.h" #include "../util.h" @@ -186,7 +189,14 @@ static void on_realize(GtkGLArea *gl_area, struct jni_gl_callback_data *d) JNIEnv *env; (*d->jvm)->GetEnv(d->jvm, (void**)&env, JNI_VERSION_1_6); - EGLDisplay eglDisplay = eglGetDisplay((EGLNativeDisplayType)0); + EGLNativeDisplayType display_id = EGL_DEFAULT_DISPLAY; +#ifdef GDK_WINDOWING_WAYLAND + GdkDisplay *gdk_dpy = gdk_display_get_default(); + if (GDK_IS_WAYLAND_DISPLAY(gdk_dpy)) { + display_id = (EGLNativeDisplayType)gdk_wayland_display_get_wl_display(gdk_dpy); + } +#endif + EGLDisplay eglDisplay = eglGetDisplay(display_id); EGLDisplay old_eglDisplay = eglGetCurrentDisplay(); d_printf("GTK version: >%d__%d__%d<\n", gtk_get_major_version(), gtk_get_minor_version(), gtk_get_micro_version()); @@ -366,7 +376,14 @@ static gboolean render(GtkGLArea *gl_area, GdkGLContext *context, struct jni_gl_ JNIEnv *env; (*d->jvm)->GetEnv(d->jvm, (void**)&env, JNI_VERSION_1_6); - EGLDisplay eglDisplay = eglGetDisplay((EGLNativeDisplayType)0); + EGLNativeDisplayType display_id = EGL_DEFAULT_DISPLAY; +#ifdef GDK_WINDOWING_WAYLAND + GdkDisplay *gdk_dpy = gdk_display_get_default(); + if (GDK_IS_WAYLAND_DISPLAY(gdk_dpy)) { + display_id = (EGLNativeDisplayType)gdk_wayland_display_get_wl_display(gdk_dpy); + } +#endif + EGLDisplay eglDisplay = eglGetDisplay(display_id); EGLDisplay old_eglDisplay = eglGetCurrentDisplay(); // save the EGL state before we change it, so we can switch back later