Fix matching semi-transparent formats

For some reason some Visuals with semi-transparency incorrectly reports
a depth of 24.

Change-Id: If41ba1032fbe7d248f53f735cb84e61038b3300a
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
This commit is contained in:
Allan Sandfeld Jensen 2018-11-01 15:06:18 +01:00
parent d761c62783
commit b64ce6f6bb

View File

@ -223,14 +223,15 @@ GLXFBConfig qglx_findConfig(Display *display, int screen , QSurfaceFormat format
continue; continue;
} }
QXlibPointer<XVisualInfo> visual(glXGetVisualFromFBConfig(display, candidate)); int actualRed;
if (visual.isNull()) int actualGreen;
continue; int actualBlue;
int actualAlpha;
glXGetFBConfigAttrib(display, candidate, GLX_RED_SIZE, &actualRed);
glXGetFBConfigAttrib(display, candidate, GLX_GREEN_SIZE, &actualGreen);
glXGetFBConfigAttrib(display, candidate, GLX_BLUE_SIZE, &actualBlue);
glXGetFBConfigAttrib(display, candidate, GLX_ALPHA_SIZE, &actualAlpha);
const int actualRed = qPopulationCount(visual->red_mask);
const int actualGreen = qPopulationCount(visual->green_mask);
const int actualBlue = qPopulationCount(visual->blue_mask);
const int actualAlpha = visual->depth - actualRed - actualGreen - actualBlue;
if (requestedRed && actualRed < requestedRed) if (requestedRed && actualRed < requestedRed)
continue; continue;