Таблица 1. Параметры видеоплат
Таблица 2. Глубина цвета в графических видеорежимах
Таблица 3. Поддерживаемые текстовые видеорежимы

Помимо традиционных испытаний в графических и бизнес-приложениях, тест-эпизодах игр и специальных аппаратных тестах мы решили посмотреть, как ведут себя платы в DOS. Этот материал посвящен параметрам, которые не всегда можно найти на страницах Руководства пользователя или в скупых строчках технических характеристик графических плат. Тем не менее они определенно заслуживают внимания как рядовых пользователей, так и опытных программистов. Для удобства результаты тестов этих параметров мы свели в соответствующие таблицы, которые далее и прокомментируем.

Для работы с DOS-приложениями в графических режимах с разрешением свыше 640x480 точек при 16-цветной палитре или 320x200 точек при 256-цветной палитре, а также в текстовых режимах с числом столбцов свыше 80 или строк более 25 видеоплаты используют сервис, предоставляемый VESA. Все исследуемые образцы в разной степени поддерживают такие возможности. Для плат, выполненных на наборах nVIDIA и 3dfx, доступна уже спецификация VESA 3.0, а остальные пока довольствуются VESA 2.0. Заметим, что версия 3.0 обладает весьма существенным преимуществом перед своей предшественницей. С ее помощью можно управлять частотой следования пикселов и теми параметрами развертки, которые позволяют существенно снизить нагрузку на глаза. Приведем конкретный пример. До недавнего времени платы, работающие с DOS-программами под управлением VESA ранних спецификаций, даже при наличии хорошего монитора не позволяли установить достаточно высокую частоту регенерации экрана, что приводило к перенапряжению зрения пользователя. Теперь этот недостаток устранен.

В общем случае предельная частота регенерации определяется отношением максимальной частоты следования пикселов к количеству точек на экране, равному произведению горизонтального и вертикального разрешения. Принимая во внимание обратный ход кадровой и строчной развертки, полученную величину следует уменьшить на 30—40%. Например, максимальная частота регенерации видеоплат на наборах микросхем компании 3dfx при разрешении 1280x1024 точек:

Fmax =160 000 000/(1280x1024x1,35)= 90 Гц.

Все рассматриваемые платы поддерживают Linear Frame Buffer (LFB), т.е. дают возможность работать с видеопамятью, используя не маленькое окно в нижнем мегабайте адресного пространства, а большое, расположенное в верхних адресах и охватывающее весь объем видеопамяти. Один из недостатков такого режима — вероятность возникновения конфликтных ситуаций при установке на системную плату более 2—3 Гбайт оперативной памяти (уже сейчас объем ОЗУ может достигать 1 Гбайта). Впрочем, есть надежда, что в IA64 все конфликты будут устранены.

Предметом нашего внимания были и TTY-функции (стандартный текстовый вывод на экран) тестируемых образцов. Напомним, что если эти функции не поддерживаются, то обработанный стандартными процедурами вывода текст (например, сообщение об ошибке при отладке графической программы) будет представлен несколькими рядами разноцветных точек вверху экрана или даже вовсе не виден при работе с LFB.

Следующий параметр — совместимость с VGA, под которой подразумевается возможность перепрограммирования видеоадаптера в VESA-режимах с помощью стандартных номеров регистров. Все это относится исключительно к сфере интересов программистов, не довольствующихся стандартными режимами.

Коллекционерам демопрограмм (демонстрационных роликов как одного из видов компьютерного самовыражения) следует помнить, что подобные шедевры иногда допускают достаточно свободные, если не сказать вольные, приемы эксплуатации аппаратуры, и отсутствие VGA-совместимости в этом случае может стать причиной испорченного настроения. В оконном режиме (без LFB) видеоадаптер, как правило, использует либо одно окно для операций записи в видеопамять и чтения из нее, либо два: одно — для чтения, другое — для записи. Нелишне будет напомнить, что при двухоконном режиме велика вероятность того, что некоторые небрежно написанные программы вообще не смогут работать.

Многие современные графические ускорители, в том числе и все рассматриваемые, позволяют повысить разрядность регистров палитры с 6 до 8 бит. Это может оказаться полезным, например, для представления изображений в градациях серого цвета, когда необходимо увеличить число переходов с 64 до 256. Если же плата не поддерживает возможность повышения разрядности, такое же число градаций удается получить только в режиме 16 млн. цветов, причем от адаптера потребуется в три-четыре раза больший объем видеопамяти и иное время обращения к ней.

Связь между глубиной цвета и количеством цветов показана во врезке «Способы представления цвета в видеоплатах». Большинство рассматриваемых видеоплат (за исключением Matrox) поддерживают режимы с разрешением менее 640x480, которые сегодня применяются исключительно в демопрограммах. Сами же эти режимы, скорее всего, лишь дань игровым традициям тех лет, когда синтез изображения выполнялся исключительно центральным процессором без участия графического адаптера, а добиться приемлемой скорости следования кадров (так называемых fps) удавалось лишь при разрешениях 320x200 точек или чуть выше. Особого внимания заслуживает и режим с разрешением 320x240 точек, имеющий характерную квадратную точку (в отличие от режима с разрешением 320x200 точек — с соотношением сторон 5/6). К слову говоря, квадратная точка вообще очень любима программистами, так как упрощает расчеты. В то же время наиболее оптимального изображения при минимуме системных ресурсов удается достичь в режиме с разрешением 640x350 точек или схожем с ним.

Современные игры, «на полную катушку» использующие ускорители, работают, как правило, в режимах с разрешением не ниже 640x480 точек. Все представленные видеоплаты оснащены мощными ускорителями, для которых наборы режимов с меньшим разрешением воспринимаются, пожалуй, как анахронизм (хотя, на наш взгляд, совместимость с вчерашними программами еще не утратила своей актуальности). Куда более странным выглядит отсутствие поддержки некоторыми платами режима с разрешением 1152x864 точки (в DOS-приложениях), отличающегося оптимальным заполнением видеопамяти. Так, он мог бы стать максимальным с точки зрения экранного разрешения режимом, поддерживающим True Color для плат на наборе Riva TNT2, однако разработчики из nVIDIA почему-то проигнорировали подобную возможность. В то же время этот режим имеется у плат Creative и Hercules (набор Savage4 Pro), хотя особой необходимости в нем они и не испытывают.

Традиционным многообразием режимов отличаются платы на кристаллах компании ATI, поддерживающие широкую гамму представления цвета при самых разнообразных разрешениях. За ними следуют платы Creative и Hercules, также имеющие в своем послужном списке многие режимы с нестандартным разрешением, в том числе и максимальный на 1900x1440 точек. На противоположном полюсе — только Matrox, команда разработчиков которого уже достаточно давно решительно отказалась поддерживать низкие разрешения на своих наборах. Кстати, в DOS-тестах плата на наборе G400 выдает о себе не слишком достоверную информацию: например, 15-разрядные режимы почему-то отождествляются с 16-разрядными.

Все текстовые режимы с высоким разрешением, предусмотренные VESA, поддерживаются большинством плат. Исключением является лишь Hercules, не имеющий ни одного дополнительного текстового режима, и платы компаний Creative и ATI, у которых доступны лишь два режима из пяти возможных. Платы Creative и Hercules выполнены на одном и том же кристалле, однако число поддерживаемых ими текстовых режимов, как мы выяснили, различается. Следует признать, что 3D Blaster Savage4 вообще стал чемпионом среди всех рассмотренных плат, предложив пользователю наибольшее число возможных вариантов работы в режимах с различным пространственным разрешением экрана.


Способы представления цвета в видеоплатах

Современные видеоплаты кроме стандартных обладают и целым рядом дополнительных режимов с большими пространственным разрешением и глубиной цвета. И если разрешение, будучи величиной наглядной, достаточно прозрачно для понимания, то об особенностях представления цвета имеет смысл поговорить более подробно. Начнем с режимов, обладающих наибольшей глубиной цвета.

1. Режим 16,8 млн. цветов (True Color).

В этом случае каждому из основных цветов RGB-сигнала (красный, зеленый, синий) отводится по одному байту. Поскольку байт может принимать 256 различных значений, то и градаций яркости каждого цвета также будет 256. Полное цветовое пространство включает свыше 16 млн. цветов, однако многие из них для человеческого глаза практически неразличимы. Теоретически режим очень прост для реализации, однако он имеет одну неприятную особенность — на каждый пиксел приходится по три байта (24 бита), что неудобно с точки зрения схемотехники дешифратора адресов видеоадаптера. Программисту также приходится несладко, поскольку для того чтобы «поставить точку», нужно выполнить не менее двух операций записи. Более предпочтительным выглядит режим, в котором один байт не используется. В этом случае на пиксел приходится четыре байта, что полностью соответствует 32-битовой разрядности современных процессоров. Следует, правда, отметить, что такой режим использует видеопамять гораздо расточительнее (на треть больше). Обычно в видеоплатах реализуется только один из приведенных режимов, а вот в ускорителях компании ATI — оба.

2. Режим 32/64 тыс. цветов (High Color).

Здесь цвета кодируются так же, как и в True Color, но на каждый из трех основных отводится только по 5 бит, что в результате дает 32 градации яркости. Нетрудно догадаться, что на пиксел приходится 15 бит и воспроизводится 32 тыс. цветов (причем один бит в двухбайтовом слове не используется). В режиме же с 64 тыс. цветов для зеленого цвета, к которому человеческий глаз наиболее чувствителен, отводится на 1 бит больше. Таким образом, он имеет 64 градации яркости, используя все доступные 16 бит. Этот режим довольно неудобен для программирования, так как назначение определенного цвета для пиксела связано с применением битовых операций и сдвигов. Обладая сходными с True Color возможностями по управлению цветом (освещение, в том числе цветное, тени, полупрозрачность и т.п.), режим High Color расходует вдвое меньше видеопамяти.

3. Режим 256 цветов.

В 256-цветных режимах применен совершенно иной механизм цветообразования, поскольку при наличии 8 бит на пиксел отвести хоть какое-либо разумное число бит для каждого из основных цветов не представляется возможным. В отличие от двух предыдущих, называемых режимами с прямым, или непосредственным, представлением цвета (Direct Color), этот режим называют индексным. В нем биты сами по себе ничего не обозначают, а байт целиком является номером (индексом) в таблице цветов (палитре), выбираемой индивидуально для каждого изображения. Каждому из 256 элементов может быть назначен любой из 262 тыс. доступных цветов. Естественно, выбираются только те из них, которые подходят именно для данного изображения. Все это позволяет очень экономно расходовать видеопамять и в определенных случаях (правда, довольно редких) обеспечивает даже более высокие результаты, чем 16-битовый режим. Он дает возможность достаточно просто выполнять некоторые манипуляции со всем изображением сразу (плавное затенение и «выплывание» из темноты, смена оттенков во всей картинке и т.п.), но делает практически невозможным реализацию эффектов, связанных с освещением (особенно цветным), полупрозрачностью, а также крайне затрудняет совмещение на экране изображений, имеющих различную палитру.

4. Режим 16 цветов (4 бита на пиксел).

Теоретически данный режим, подобно 256-цветному, является индексным. Однако на практике при попытке сформировать палитру, отличающуюся от стандартной, полностью исчезают некоторые цвета. Поэтому режим используется, как правило, со стандартной палитрой и прямым представлением цвета (на каждый из трех основных цветов приходится по биту, и еще один бит отводится на яркость). В результате режим имеет по два уровня яркости для трех основных цветов (модель RGB) и трех дополнительных — голубого, желтого, пурпурного (модель CMYK), а также четыре градации яркости серого. Режим крайне сложен для программирования, так как содержит четыре битовые плоскости, расположенные по одним и тем же адресам. Эти плоскости переключаются с помощью регистров, из-за чего изображение формируется чрезвычайно медленно. В настоящее время данный режим практически не применяется (за исключением стандартного VGA, где он является режимом с максимальным пространственным разрешением).