Skip to content

Commit

Permalink
glx: Move Composite's synthetic visuals to a different select group
Browse files Browse the repository at this point in the history
Should you find yourself using a 16bpp display while also using a
compositor, you poor soul, you may find that your GLX applications
behave strangely; in particular, glxgears will be transparent. This is
because it clears to (0,0,0,0) which is transparent if you honor alpha,
and it will choose the synthetic visual because it has the most
available r/g/b bits.

To avoid this, bump synthetic visuals to a higher (less-preferred)
select group. Unless the client explicitly asks for non-zero alpha bits,
this will prefer any rgb565 visual ahead of the argb8888 visual.

Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Adam Jackson <ajax@redhat.com>
  • Loading branch information
nwnk committed Jan 25, 2017
1 parent 43efaa6 commit ea483af
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions glx/glxscreens.c
Expand Up @@ -43,6 +43,7 @@
#include "glxutil.h"
#include "glxext.h"
#include "protocol-versions.h"
#include "compositeext.h"

static DevPrivateKeyRec glxScreenPrivateKeyRec;

Expand Down Expand Up @@ -336,6 +337,10 @@ __glXScreenInit(__GLXscreen * pGlxScreen, ScreenPtr pScreen)
if (config) {
pGlxScreen->visuals[pGlxScreen->numVisuals++] = config;
config->visualID = visual->vid;
#ifdef COMPOSITE
if (compIsAlternateVisual(pScreen, visual->vid))
config->visualSelectGroup++;
#endif
}
}

Expand Down

0 comments on commit ea483af

Please sign in to comment.