From a9847552f9b6034f78ce6aae2e4ad7a63a274c5a Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Sat, 11 Apr 2020 23:32:16 -0300 Subject: [PATCH 12/24] libobs-opengl: Try to use the platform display if available We need to ensure we're running all X11 code on the same display. --- libobs-opengl/gl-x11-egl.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/libobs-opengl/gl-x11-egl.c b/libobs-opengl/gl-x11-egl.c index 5b413995..47b8e420 100644 --- a/libobs-opengl/gl-x11-egl.c +++ b/libobs-opengl/gl-x11-egl.c @@ -324,14 +324,19 @@ static void gl_x11_egl_windowinfo_destroy(struct gl_windowinfo *info) bfree(info); } -static Display *open_windowless_display(void) +static Display *open_windowless_display(Display *platform_display) { - Display *display = XOpenDisplay(NULL); + Display *display; xcb_connection_t *xcb_conn; xcb_screen_iterator_t screen_iterator; xcb_screen_t *screen; int screen_num; + if (platform_display) + display = platform_display; + else + display = XOpenDisplay(NULL); + if (!display) { blog(LOG_ERROR, "Unable to open new X connection!"); return NULL; @@ -392,7 +397,8 @@ static struct gl_platform *gl_x11_egl_platform_create(gs_device_t *device, For an explanation see here: http://xcb.freedesktop.org/MixingCalls/ Essentially, EGL requires Xlib. Everything else we use xcb. */ struct gl_platform *plat = bmalloc(sizeof(struct gl_platform)); - Display *display = open_windowless_display(); + Display *platform_display = obs_get_nix_platform_display(); + Display *display = open_windowless_display(platform_display); if (!display) { goto fail_display_open; -- 2.28.0