}
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 );