The settings for each platform in rootlessConfig.h were misleading. On Apple builds, ROOTLESS_PROTECT_ALPHA was defined to TRUE; on Windows it was defined to NO. Both cases enabled alpha channel protection though, because the test in rootlessGC.c was a simple #ifdef.
Colin Harrison says that for Xming builds he's always patched it to define ROOTLESS_PROTECT_ALPHA to TRUE for Windows as well, and that unconditionally enabling alpha-channel protection would be appropriate. Signed-off-by: Jamey Sharp <[email protected]> Cc: Jeremy Huddleston <[email protected]> Cc: Jon TURNEY <[email protected]> Cc: Colin Harrison <[email protected]> --- miext/rootless/README.txt | 34 ++++++++++++++++------------------ miext/rootless/rootlessConfig.h | 2 -- miext/rootless/rootlessGC.c | 15 +++++---------- 3 files changed, 21 insertions(+), 30 deletions(-) diff --git a/miext/rootless/README.txt b/miext/rootless/README.txt index 754715d..cea2c01 100644 --- a/miext/rootless/README.txt +++ b/miext/rootless/README.txt @@ -76,13 +76,12 @@ rootlessConfig.h to specify compile time options for its platform. The following compile-time options are defined in rootlessConfig.h: - o ROOTLESS_PROTECT_ALPHA: By default for a color bit depth of 24 and - 32 bits per pixel, fb will overwrite the "unused" 8 bits to optimize - drawing speed. If this is true, the alpha channel of frames is - protected and is not modified when drawing to them. The bits - containing the alpha channel are defined by the macro - RootlessAlphaMask(bpp), which should return a bit mask for - various bits per pixel. + o RootlessAlphaMask(bpp): By default for a color bit depth of 24 and 32 + bits per pixel, fb will overwrite the "unused" 8 bits to optimize + drawing speed. Rootless ensures that the alpha channel of frames is + protected and is not modified when drawing to them. The bits + containing the alpha channel are defined by this macro, which should + return a bit mask for various bits per pixel. o ROOTLESS_REDISPLAY_DELAY: Time in milliseconds between updates to the underlying window server. Most operations will be buffered until @@ -126,17 +125,16 @@ functions should be used instead of fb. Alpha Channel Protection - If the bits per pixel is greater then the color bit depth, the contents -of the extra bits are undefined by the X11 protocol. Some window systems -will use these extra bits as an alpha channel. The generic rootless layer can -be configured to protect these bits and make sure they are not modified by -other parts of the X server. To protect the alpha channel -ROOTLESS_PROTECT_ALPHA and RootlessAlphaMask(bpp) must be -set appropriately as described under the compile time options. This -ensures that the X11 graphics primitives do not overwrite the alpha -channel in an attempt to optimize drawing. In addition, the window -functions PaintWindow() and Composite() must be replaced by alpha -channel safe variants. These are provided in rootless/safeAlpha. + If the bits per pixel is greater then the color bit depth, the +contents of the extra bits are undefined by the X11 protocol. Some window +systems will use these extra bits as an alpha channel. The generic rootless +layer will protect these bits and make sure they are not modified by other +parts of the X server. To protect the alpha channel RootlessAlphaMask(bpp) +must be set appropriately as described under the compile time options. This +ensures that the X11 graphics primitives do not overwrite the alpha channel +in an attempt to optimize drawing. In addition, the window functions +PaintWindow() and Composite() must be replaced by alpha channel safe +variants. These are provided in rootless/safeAlpha. Credits diff --git a/miext/rootless/rootlessConfig.h b/miext/rootless/rootlessConfig.h index a6c0d25..222be53 100644 --- a/miext/rootless/rootlessConfig.h +++ b/miext/rootless/rootlessConfig.h @@ -36,7 +36,6 @@ #ifdef __APPLE__ -# define ROOTLESS_PROTECT_ALPHA TRUE # define ROOTLESS_REDISPLAY_DELAY 10 # define ROOTLESS_RESIZE_GRAVITY TRUE /*# define ROOTLESSDEBUG*/ @@ -50,7 +49,6 @@ #if defined(__CYGWIN__) || defined(WIN32) -# define ROOTLESS_PROTECT_ALPHA NO # define ROOTLESS_REDISPLAY_DELAY 10 # undef ROOTLESS_RESIZE_GRAVITY /*# define ROOTLESSDEBUG*/ diff --git a/miext/rootless/rootlessGC.c b/miext/rootless/rootlessGC.c index 68a9dc7..a9cb413 100644 --- a/miext/rootless/rootlessGC.c +++ b/miext/rootless/rootlessGC.c @@ -148,12 +148,11 @@ static GCOps rootlessGCOps = { }; /* - If ROOTLESS_PROTECT_ALPHA is set, we have to make sure that the alpha - channel of the on screen windows is always opaque. fb makes this harder - than it would otherwise be by noticing that a planemask of 0x00ffffff - includes all bits when depth==24, and so it "optimizes" the planemask to - 0xffffffff. We work around this by temporarily setting depth=bpp while - changing the GC. + We have to make sure that the alpha channel of the on screen windows is + always opaque. fb makes this harder than it would otherwise be by + noticing that a planemask of 0x00ffffff includes all bits when + depth==24, and so it "optimizes" the planemask to 0xffffffff. We work + around this by temporarily setting depth=bpp while changing the GC. So the normal situation (in 32 bit mode) is that the planemask is 0x00ffffff and thus fb leaves the alpha channel alone. The rootless @@ -331,7 +330,6 @@ RootlessValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable) if (pDrawable->type == DRAWABLE_WINDOW) { -#ifdef ROOTLESS_PROTECT_ALPHA unsigned int depth = pDrawable->depth; // We force a planemask so fb doesn't overwrite the alpha channel. @@ -340,9 +338,6 @@ RootlessValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable) pGC->planemask &= ~RootlessAlphaMask(pDrawable->bitsPerPixel); VALIDATE_GC(pGC, changes | GCPlaneMask, pDrawable); pDrawable->depth = depth; -#else - VALIDATE_GC(pGC, changes, pDrawable); -#endif } else { pGC->funcs->ValidateGC(pGC, changes, pDrawable); } -- 1.7.0 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
