mesa: fix PACK_COLOR_5551(), PACK_COLOR_1555() macros
authorBrian Paul <brianp@vmware.com>
Tue, 20 Sep 2011 00:25:38 +0000 (18:25 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 21 Sep 2011 02:17:42 +0000 (20:17 -0600)
The 1-bit alpha channel was incorrectly encoded.  Previously, any non-zero
alpha value for the ubyte alpha value would set A=1.  Instead, use the
most significant bit of the ubyte alpha to determine the A bit.  This is
consistent with the other channels and other OpenGL implementations.

Note: This is a candidate for the 7.11 branch.

Reviewed-by: Michel Dänzer <michel@daenzer.net>
src/mesa/main/colormac.h

index 0b8864a61eb053b69e7094ab0cdbd402b0a1115c..4294f3239910ec495cf492c9d7207100b1c8e263 100644 (file)
@@ -74,11 +74,11 @@ _mesa_unclamped_float_rgba_to_ubyte(GLubyte dst[4], const GLfloat src[4])
 
 #define PACK_COLOR_5551( R, G, B, A )                                  \
    ((((R) & 0xf8) << 8) | (((G) & 0xf8) << 3) | (((B) & 0xf8) >> 2) |  \
-    ((A) ? 1 : 0))
+    ((A) >> 7))
 
 #define PACK_COLOR_1555( A, B, G, R )                                  \
    ((((B) & 0xf8) << 7) | (((G) & 0xf8) << 2) | (((R) & 0xf8) >> 3) |  \
-    ((A) ? 0x8000 : 0))
+    (((A) & 0x80) << 8))
 
 #define PACK_COLOR_1555_REV( A, B, G, R )                                      \
    ((((B) & 0xf8) >> 1) | (((G) & 0xc0) >> 6) | (((G) & 0x38) << 10) | (((R) & 0xf8) << 5) |   \