85 lines
2.5 KiB
C++
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
|
|
|