From e5580e18bab85e630588ba89e981fa0dace84e5e Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 4 Sep 2019 09:27:58 -0700 Subject: [PATCH] x11: add a hint to force the VisualID used when creating a window. --- Android.mk | 0 include/SDL_hints.h | 6 ++++++ src/video/x11/SDL_x11window.c | 22 +++++++++++++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) mode change 100644 => 100755 Android.mk diff --git a/Android.mk b/Android.mk old mode 100644 new mode 100755 diff --git a/include/SDL_hints.h b/include/SDL_hints.h index 8fa0dd660..9f75189d1 100644 --- a/include/SDL_hints.h +++ b/include/SDL_hints.h @@ -197,6 +197,12 @@ extern "C" { */ #define SDL_HINT_VIDEO_X11_XRANDR "SDL_VIDEO_X11_XRANDR" +/** + * \brief A variable forcing the visual ID chosen for new X11 windows + * + */ +#define SDL_HINT_VIDEO_X11_WINDOW_VISUALID "SDL_VIDEO_X11_WINDOW_VISUALID" + /** * \brief A variable controlling whether the X11 _NET_WM_PING protocol should be supported. * diff --git a/src/video/x11/SDL_x11window.c b/src/video/x11/SDL_x11window.c index 798e8bc81..c5bb1dc95 100644 --- a/src/video/x11/SDL_x11window.c +++ b/src/video/x11/SDL_x11window.c @@ -393,7 +393,27 @@ X11_CreateWindow(_THIS, SDL_Window * window) long fevent = 0; #if SDL_VIDEO_OPENGL_GLX || SDL_VIDEO_OPENGL_EGL - if ((window->flags & SDL_WINDOW_OPENGL) && + const char *forced_visual_id = SDL_GetHint(SDL_HINT_VIDEO_X11_WINDOW_VISUALID); + + if (forced_visual_id != NULL && forced_visual_id[0] != '\0') + { + XVisualInfo *vi, template; + int nvis; + + SDL_zero(template); + template.visualid = SDL_strtol(forced_visual_id, NULL, 0); + vi = X11_XGetVisualInfo(display, VisualIDMask, &template, &nvis); + if (vi) { + visual = vi->visual; + depth = vi->depth; + X11_XFree(vi); + } + else + { + return -1; + } + } + else if ((window->flags & SDL_WINDOW_OPENGL) && !SDL_getenv("SDL_VIDEO_X11_VISUALID")) { XVisualInfo *vinfo = NULL;