Home | History | Annotate | Download | only in main
      1 /*
      2  * Mesa 3-D graphics library
      3  * Version:  7.3
      4  *
      5  * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
      6  *
      7  * Permission is hereby granted, free of charge, to any person obtaining a
      8  * copy of this software and associated documentation files (the "Software"),
      9  * to deal in the Software without restriction, including without limitation
     10  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     11  * and/or sell copies of the Software, and to permit persons to whom the
     12  * Software is furnished to do so, subject to the following conditions:
     13  *
     14  * The above copyright notice and this permission notice shall be included
     15  * in all copies or substantial portions of the Software.
     16  *
     17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     18  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     20  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
     21  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     22  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     23  */
     24 
     25 
     26 /**
     27  * \file colormac.h
     28  * Color-related macros
     29  */
     30 
     31 
     32 #ifndef COLORMAC_H
     33 #define COLORMAC_H
     34 
     35 
     36 #include "config.h"
     37 #include "macros.h"
     38 #include "mtypes.h"
     39 
     40 
     41 /**
     42  * Convert four float values in [0,1] to ubytes in [0,255] with clamping.
     43  */
     44 static inline void
     45 _mesa_unclamped_float_rgba_to_ubyte(GLubyte dst[4], const GLfloat src[4])
     46 {
     47    int i;
     48    for (i = 0; i < 4; i++)
     49       UNCLAMPED_FLOAT_TO_UBYTE(dst[i], src[i]);
     50 }
     51 
     52 
     53 /**
     54  * \name Generic color packing macros.  All inputs should be GLubytes.
     55  *
     56  * \todo We may move these into texstore.h at some point.
     57  */
     58 /*@{*/
     59 
     60 #define PACK_COLOR_8888( X, Y, Z, W ) \
     61    (((X) << 24) | ((Y) << 16) | ((Z) << 8) | (W))
     62 
     63 #define PACK_COLOR_8888_REV( X, Y, Z, W ) \
     64    (((W) << 24) | ((Z) << 16) | ((Y) << 8) | (X))
     65 
     66 #define PACK_COLOR_888( X, Y, Z ) \
     67    (((X) << 16) | ((Y) << 8) | (Z))
     68 
     69 #define PACK_COLOR_565( X, Y, Z )                                  \
     70    ((((X) & 0xf8) << 8) | (((Y) & 0xfc) << 3) | (((Z) & 0xf8) >> 3))
     71 
     72 #define PACK_COLOR_565_REV( X, Y, Z ) \
     73    (((X) & 0xf8) | ((Y) & 0xe0) >> 5 | (((Y) & 0x1c) << 11) | (((Z) & 0xf8) << 5))
     74 
     75 #define PACK_COLOR_5551( R, G, B, A )					\
     76    ((((R) & 0xf8) << 8) | (((G) & 0xf8) << 3) | (((B) & 0xf8) >> 2) |	\
     77     ((A) >> 7))
     78 
     79 #define PACK_COLOR_1555( A, B, G, R )					\
     80    ((((B) & 0xf8) << 7) | (((G) & 0xf8) << 2) | (((R) & 0xf8) >> 3) |	\
     81     (((A) & 0x80) << 8))
     82 
     83 #define PACK_COLOR_1555_REV( A, B, G, R )					\
     84    ((((B) & 0xf8) >> 1) | (((G) & 0xc0) >> 6) | (((G) & 0x38) << 10) | (((R) & 0xf8) << 5) |	\
     85     ((A) ? 0x80 : 0))
     86 
     87 #define PACK_COLOR_2101010_UB( A, B, G, R )					\
     88    (((B) << 22) | ((G) << 12) | ((R) << 2) |	\
     89     (((A) & 0xc0) << 24))
     90 
     91 #define PACK_COLOR_2101010_US( A, B, G, R )					\
     92    ((((B) >> 6) << 20) | (((G) >> 6) << 10) | ((R) >> 6) |	\
     93     (((A) >> 14) << 30))
     94 
     95 #define PACK_COLOR_4444( R, G, B, A )					\
     96    ((((R) & 0xf0) << 8) | (((G) & 0xf0) << 4) | ((B) & 0xf0) | ((A) >> 4))
     97 
     98 #define PACK_COLOR_4444_REV( R, G, B, A )				\
     99    ((((B) & 0xf0) << 8) | (((A) & 0xf0) << 4) | ((R) & 0xf0) | ((G) >> 4))
    100 
    101 #define PACK_COLOR_44( L, A )						\
    102    (((L) & 0xf0) | (((A) & 0xf0) >> 4))
    103 
    104 #define PACK_COLOR_88( L, A )						\
    105    (((L) << 8) | (A))
    106 
    107 #define PACK_COLOR_88_REV( L, A )					\
    108    (((A) << 8) | (L))
    109 
    110 #define PACK_COLOR_1616( L, A )						\
    111    (((L) << 16) | (A))
    112 
    113 #define PACK_COLOR_1616_REV( L, A )					\
    114    (((A) << 16) | (L))
    115 
    116 #define PACK_COLOR_332( R, G, B )					\
    117    (((R) & 0xe0) | (((G) & 0xe0) >> 3) | (((B) & 0xc0) >> 6))
    118 
    119 #define PACK_COLOR_233( B, G, R )					\
    120    (((B) & 0xc0) | (((G) & 0xe0) >> 2) | (((R) & 0xe0) >> 5))
    121 
    122 /*@}*/
    123 
    124 
    125 #endif /* COLORMAC_H */
    126