room101/PIXEL.HPP

85 lines
2.5 KiB
C++

#ifndef __PIXEL_HPP
#define __PIXEL_HPP
#define PIXEL_RED (0x7C00)
#define PIXEL_GREEN (0x03E0)
#define PIXEL_BLUE (0x001F)
#define PIXEL_WHITE (0xFFFF)
#define PIXEL_BLEND(A,B) ((((Pixel)(A) & 0x7BDE)>>1) + (((Pixel)(B) & 0x7BDE) >> 1))
#define PIXEL_MASK 31
typedef unsigned short Pixel;
/*******************************************************************************
** PixelCreate
*******************************************************************************/
inline Pixel
PixelCreate(int r, int g, int b)
{
return
((r & 31) << 10) |
((g & 31) << 5) |
((b & 31) << 0) ;
}
/*******************************************************************************
** PixelRed
*******************************************************************************/
inline int
PixelRed(Pixel p)
{
return (p >> 10) & 31;
}
/*******************************************************************************
** PixelGreen
*******************************************************************************/
inline int
PixelGreen(Pixel p)
{
return (p >> 5) & 31;
}
/*******************************************************************************
** PixelBlue
*******************************************************************************/
inline int
PixelBlue(Pixel p)
{
return (p >> 0) & 31;
}
/*******************************************************************************
** PixelSetRed
*******************************************************************************/
inline void
PixelSetRed(Pixel* pixel, int value)
{
*pixel = (*pixel & ~PIXEL_RED ) | (value << 10);
}
/*******************************************************************************
** PixelSetGreen
*******************************************************************************/
inline void
PixelSetGreen(Pixel* pixel, int value)
{
*pixel = (*pixel & ~PIXEL_GREEN) | (value << 5);
}
/*******************************************************************************
** PixelSetBlue
*******************************************************************************/
inline void
PixelSetBlue(Pixel* pixel, int value)
{
*pixel = (*pixel & ~PIXEL_BLUE ) | (value << 0);
}
/*******************************************************************************
** PixelZDepth
*******************************************************************************/
inline float
PixelZDepth(float z)
{
return 32000.0f / z;
}
#endif