}
doneVideo (); freeTiles (); freeSprites ();
}

Предполагается, что функция drawScreen выводит изображение в буфер i невидимую страницу и вызов функции swapBuffers делает построенное изобра видимым.

4. Работа с основными графическими устройствами

4.9,6. Нестандартные режимы адаптера VGA (Х-режимы)

Для 256-цветных режимов существует еще один срособ организации видеопамяти; 8 бит, отводимых под каждый пиксел, хранятся вместе, образуя 1 байт, но эти байты находятся на разных плоскостях видеопамяти.

Пиксел

Адрес

Плоскость

(0, 0)
(1.0)
(2, 0)
(3,0)
(4,0)
(5,0) ,

а а

у * 80 + (х » 2)

х&З

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

Ниже приводится программа, устанавливающая режим с разрешением 320 на 200 пикселов с использованием 256 цветов посредством изменения стандартного режима 13h, и иллюстрируется возможность работы сразу с четырьмя страницами.

0 // File example2.cpp #include <alioc.h> #include <conio.h> #include <mem.h> #include <stdio.h> #include "ega.h"
unsigned pageBase = 0;
char leftPlaneMask 0 = {OxOF, OxOE, OxOC, 0x08 }; char rightPlaneMask Q = { 0x01, 0x03, 0x07, OxOF }; char far * font;
void setX() {
setVideoMode (0x13 );
pageBase = 0xA000;

writeReg ( EGA_SEQUENCER, 4, 6 ); writeReg ( EGA_CRTC, 0x17, ОхЕЗ ); writeReg ( EGA_CRTC, 0x14, 0 );

// clear screen
writeReg ( EGA_SEQUENCER, EGA_MAP_MASK, OxOF ); Jmemset ( MK_FP ( pageBase, 0 ), '\0\ OxFFFF.);

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

void setVisualPage (int page ) {
.unsigned addr = page * 0x4000;
// wait for vertical retrace while ((inportb ( 0x3DA ) & 0x08 ) == 0 )
writeReg ( EGA_CRTC, OxOC, addr» 8 ); writeReg ( EGA_CRTC, OxDC, addr & OxOF );

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