Поскольку текстуры могут иметь различную внутреннюю структуру
Iчисло цветовых компонент, количество битов на каждую компоненту и порядок их следования), то удобно, чтобы соответствующий объект содержал Ьутри себя не только идентификатор и тип текстуры в OpenGL, но также [некоторую структуру, описывающую структуру пикселов в памяти. Ниже Приводится описание такой структуры.
Ç1
class PixelFormat {
public :
unsigned redMask; // bit mask for red color bits
int redShift; // position of red bits in pixel
// data
int redBits; // # of bits for red field
unsigned greenMask; // bit mask for green color bits int greenShift; // position of green bits in pixel
// data
int greenBits; // # of bits for green field
unsigned blueMask; // bit mask for blue color bits
int blueShift; // position of blue bits in pixel
// data
int blueBitS; unsigned alphaMask; int alphaShift; int alphaBits;
int bitsPerPixel; // # of bits per pixel
int bytesPerPixel; // # of bytes per single pixel
PixelFormat () {}
PixelFormat ( unsigned theRedMask, unsigned theGreenMask, unsigned theBlueMask, unsigned theAlphaMask = 0 )
{
completeFromMasks ( theRedMask, theGreenMask,
theBlueMask, theAlphaMask );
}
void completeFromMasks ( unsigned theRedMask,
unsigned theGreenMask, unsigned theBlueMask, unsigned theAlphaMask = 0 ) ;
intrgbaToInt ( int red, int green, int blue, int alpha = 0 ) const
{
return ( (blue»(8-blueBits) )«blueShift) |
((green>>(8-greenBits))<<greenShift) |
( (red»(8-redBits) )«redShift) |
( (alpha» (8-alphaBits) ) «alphaShift) ; ;
}
Основные классы для рендерера. Работа с ресурсами
int getRed ( int color ) const {
return ((color >> redShift) « (8 - redBits)) & redMask;
}
intgetGreen ( int color ) const (
return ((color >> greenShift) << (8 - greenBits)) & greenMask;
}
intgetBlue ( int color ) const (