diff --git a/src/video/x11/SDL_x11opengles.c b/src/video/x11/SDL_x11opengles.c index ebb455c372..caa2d0c4e4 100644 --- a/src/video/x11/SDL_x11opengles.c +++ b/src/video/x11/SDL_x11opengles.c @@ -59,9 +59,9 @@ XVisualInfo *X11_GLES_GetVisual(SDL_VideoDevice *_this, Display *display, int sc { XVisualInfo *egl_visualinfo = NULL; - EGLint visual_id; + EGLint visual_id = 0; XVisualInfo vi_in; - int out_count; + int out_count = 0; if (!_this->egl_data) { // The EGL library wasn't loaded, SDL_GetError() should have info @@ -71,8 +71,24 @@ XVisualInfo *X11_GLES_GetVisual(SDL_VideoDevice *_this, Display *display, int sc if (_this->egl_data->eglGetConfigAttrib(_this->egl_data->egl_display, _this->egl_data->egl_config, EGL_NATIVE_VISUAL_ID, - &visual_id) == EGL_FALSE || - !visual_id) { + &visual_id) == EGL_FALSE) { + visual_id = 0; + } + if (visual_id != 0) { + vi_in.screen = screen; + vi_in.visualid = visual_id; + egl_visualinfo = X11_XGetVisualInfo(display, VisualScreenMask | VisualIDMask, &vi_in, &out_count); + if (transparent && egl_visualinfo) { + Uint32 format = X11_GetPixelFormatFromVisualInfo(display, egl_visualinfo); + if (!SDL_ISPIXELFORMAT_ALPHA(format)) { + // not transparent! + X11_XFree(egl_visualinfo); + egl_visualinfo = NULL; + } + } + } + + if(!egl_visualinfo) { // Use the default visual when all else fails vi_in.screen = screen; egl_visualinfo = X11_XGetVisualInfo(display, @@ -95,12 +111,7 @@ XVisualInfo *X11_GLES_GetVisual(SDL_VideoDevice *_this, Display *display, int sc } } } - } else { - vi_in.screen = screen; - vi_in.visualid = visual_id; - egl_visualinfo = X11_XGetVisualInfo(display, VisualScreenMask | VisualIDMask, &vi_in, &out_count); } - return egl_visualinfo; }