Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members  

colormap.h

Go to the documentation of this file.
00001 
00002 #ifndef header_colormap
00003 #define header_colormap
00004 
00005 #include "API/Display/Display/target.h"
00006 
00007 class CL_ColorMap
00008 {
00009 public:
00010         CL_ColorMap(
00011                 unsigned int red_mask,
00012                 unsigned int green_mask,
00013                 unsigned int blue_mask,
00014                 unsigned int alpha_mask)
00015         {
00016                 init(red_mask, green_mask, blue_mask, alpha_mask);
00017         }
00018 
00019         CL_ColorMap(CL_Target *target)
00020         {
00021                 init(
00022                         target->get_red_mask(),
00023                         target->get_green_mask(),
00024                         target->get_blue_mask(),
00025                         target->get_alpha_mask());
00026         }
00027 
00028         unsigned int calc_color(float r, float g, float b, float a)
00029         {
00030                 // paranoia:
00031                 if (r>1) r=1; if (g>1) g=1;
00032                 if (b>1) b=1; if (a>1) a=1;
00033                 if (r<0) r=0; if (g<0) g=0;
00034                 if (b<0) b=0; if (a<0) a=0;
00035 
00036                 unsigned int red = (unsigned int) (r*((1<<m_red_length)-1)+0.5);
00037                 unsigned int green = (unsigned int) (g*((1<<m_green_length)-1)+0.5);
00038                 unsigned int blue = (unsigned int) (b*((1<<m_blue_length)-1)+0.5);
00039                 unsigned int alpha = (unsigned int) (a*((1<<m_alpha_length)-1)+0.5);
00040 
00041                 return
00042                         (red<<m_red_start)+
00043                         (green<<m_green_start)+
00044                         (blue<<m_blue_start)+
00045                         (alpha<<m_alpha_start);
00046         }
00047 
00048         unsigned int m_red_length, m_red_start;
00049         unsigned int m_green_length, m_green_start;
00050         unsigned int m_blue_length, m_blue_start;
00051         unsigned int m_alpha_length, m_alpha_start;
00052 private:
00053 
00054         void init(
00055                 unsigned int red_mask,
00056                 unsigned int green_mask,
00057                 unsigned int blue_mask,
00058                 unsigned int alpha_mask)
00059         {
00060                 m_red_start = start_bit(red_mask);
00061                 m_green_start = start_bit(green_mask);
00062                 m_blue_start = start_bit(blue_mask);
00063                 m_alpha_start = start_bit(alpha_mask);
00064 
00065                 m_red_length = length(red_mask, m_red_start);
00066                 m_green_length = length(green_mask, m_green_start);
00067                 m_blue_length = length(blue_mask, m_blue_start);
00068                 m_alpha_length = length(alpha_mask, m_alpha_start);
00069         }
00070 
00071         int start_bit(unsigned int mask)
00072         {
00073                 if (mask == 0) return 0;
00074         
00075                 unsigned int bitval=1;
00076                 unsigned int counter=0;
00077 
00078                 while ((bitval&mask)==0)
00079                 {
00080                         counter++;
00081                         bitval = bitval << 1;
00082                 }
00083 
00084                 return counter;
00085         }
00086 
00087         int length(unsigned int mask, unsigned int start_bit)
00088         {
00089                 if (mask == 0) return 0;
00090 
00091                 unsigned int bitval=1;
00092                 unsigned int counter=0;
00093 
00094                 mask = mask >> start_bit;
00095 
00096                 while ((bitval&mask)!=0)
00097                 {
00098                         counter++;
00099                         bitval = bitval << 1;
00100                 }
00101 
00102                 return counter;
00103         }
00104 
00105 /*      friend std::ostream &operator <<(std::ostream &os, CL_ColorMap &map)
00106         {
00107                 os << "ColorLength(" << map.m_red_length << "," << map.m_green_length << "," << map.m_blue_length << ") : "
00108                         << "ColorStart(" << map.m_red_start << "," << map.m_green_start << "," << map.m_blue_start << ")";
00109                 return os;
00110         }
00111 */
00112 };
00113 
00114 #endif

Generated at Wed Apr 4 19:53:59 2001 for ClanLib by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001