Переменные формата пикселей в классе DirectDrawWin
При описании класса DirectDrawWin в главе 3 мы видели, что функция DirectDrawWin::ActivateDisplayMode() после активизации нового видеорежима, но до создания вспомогательных поверхностей приложения, вызывает функцию StorePixelFormatData(). Описание этой функции было отложено до настоящего момента.
Функция StorePixelFormatData() присваивает значения шести переменным класса DirectDrawWin в соответствии с форматом пикселей текущего активного видеорежима; эти переменные определяют стартовый бит и количество бит для каждой цветовой составляющей пикселя. В следующем разделе мы увидим, как эти переменные используются при манипуляциях с памятью поверхности. Функция StorePixelFormatData() выглядит так:
BOOL DirectDrawWin::StorePixelFormatData() { DDPIXELFORMAT format; ZeroMemory( &format, sizeof(format) ); format.dwSize=sizeof(format); if (primsurf->GetPixelFormat( &format )!=DD_OK) { TRACE("StorePixelFormatData() failed\n"); return FALSE; }
loREDbit = LowBitPos( format.dwRBitMask ); WORD hiREDbit = HighBitPos( format.dwRBitMask ); numREDbits=(WORD)(hiREDbit-loREDbit+1); loGREENbit = LowBitPos( format.dwGBitMask ); WORD hiGREENbit = HighBitPos( format.dwGBitMask ); numGREENbits=(WORD)(hiGREENbit-loGREENbit+1); loBLUEbit = LowBitPos( format.dwBBitMask ); WORD hiBLUEbit = HighBitPos( format.dwBBitMask ); numBLUEbits=(WORD)(hiBLUEbit-loBLUEbit+1); return TRUE; } |
Функция StorePixelFormatData() присваивает значения шести переменным формата с помощью масок, полученных функцией GetPixelFormat() интерфейса DirectDrawSurface. Это следующие переменные:
- loREDbit
- numREDbits
- loGREENbit
- numGREENbits
- loBLUEbit
- numBLUEbits
Как вы убедитесь при изучении кода для работы с беспалитровыми поверхностями, эти переменные оказываются очень удобными.