src += 80 - cols; dst += 80 - cols;
}
setRWMode ( 0, 0 );
}

4.9.3. Режим записи 2

В этом режиме младшие 4 бита байта, посланного процессором, определяют цвет, которым будут построены незащищенные битовой маской пикселы. Регистр битовой маски защищает от изменения определенные пикселы. Регистр маски плоскости защищает от изменения определенные плоскости. Регистр DataRotate устанавливает способ наложения построенных пикселов на существующее изображение.

Приведенный ниже пример рисует прямоугольник" заданного цвета, используя режим записи 2.

И // File bar.cpp

Void bar ( int x1, int y1, int x2, int y2, int color ) {
char far * vptr = (char far *) MK FP (OxAOOO, y1 *80+(x1 »3)); irtt cols = ( x2 » 3 ) - ( x1 >> 3 ) -1; char Imask = leftMask ( x1 ); char rmask = rightMask ( x2 ); char latch;
setRWMode ( 0, 2 );
if ( cols < 0 ) // both x1 & x2 are located in the same byte {
writeReg ( EGA_GRAPHICS, EGA_BIT_MASK, Imask & rmask );

for ( int у = y1 ; у <= y2; y++, vptr += 80 )

{
latch = *vptr; * *vptr = color;
}

Компьютерная графика. Полигональные модели

writeReg ( EGAJ3RAPHICS, EGA_BIT_MASK, OxFF );
}
else
{ .

for (int у = y1; у <= y2; y++ ) {

writeReg ( EGAJ3RAPHICS, EGA_BITJv1ASK, Imask ); latch = *vptr; *vptr++ = color;
writeReg ( EGAJ3RAPHICS, EGA_BIT_MASK, OxFF );
for (int x = 0; x < cols; x++ ) {
latch = *vptr; *vptr++ = color;
}
writeReg ( EGAJ3RAPHICS, EGA_BIT_MASK, rmask );
latch = *vptr; *vptr++ = color; vptr += 78 - cols;
}
}
setRWMode (0, 0 );
writeReg ( EGA_GRAPHICS, EGA_BIT_MASK, OxFF );
}

Следующие две функции служат для запоминания и восстановления запис го изображения.

(2! // File store.cpp
void storeRect (int x1, int y1, int x2, int y2, char huge * buf)
{
char far * vptr = (char far *) MK_FP (OxAOOO, y1 *80+(x1 »3)); int cols =(x2»3)-(x1 »3)-1; if ( cols < 0 ) cols = 0;

for (int у = y1; у <= y2; y++, vptr += 80 ) for (int plane = 0; plane < 4; plane++ )

{
writeReg ( EGAJ3RAPHICS, EGA_READ_MAP_SELECT, plane ); for (int x = 0; x < cols + 2; x++ ) *buf++ = *vptr++;

⇐ Предыдущая| |Следующая ⇒