Содержание
Введение
Принципы вывода изображений
Графический режим
Текстовый режим
Трехмерная графика
Графический конвейер
Рендеринг
Реализация трехмерной графики
Обработка видеоизображений
Стандарты MPEG
Введение
Персональный компьютер смог стать привлекательным вычислительным средством благодаря интерактивности взаимодействия с пользователем. Интерактивность подразумевает наличие устройств оперативного ввода и вывода информации. Основной поток выходной информации — визуальный, причем информация представляется как в текстовом, так и в графическом виде. Визуальная информация может выводиться на экран, возможно получение и ее «твердой копии» (Hard Copy) — на бумаге, пленке и т. п. Для интерактивного режима вывод на бумагу малоинтересен, хотя в далекой истории компьютеров интерактивный режим впервые был реализован именно на телетайпе (грубо говоря, электрической пишущей машинке, подключенной к компьютеру). Данный реферат посвящен активным средствам вывода визуальной информации — видеосистеме PC. Активность подразумевает возможность изменения изображения без смены носителя.
В первые годы существования PC его видеосистемой называли средства вывода текстовой или графической информации на какой-либо экран, В качестве оконечного устройства чаще всего использовали (и продолжают использовать) мониторы с электронно-лучевыми трубками. Адаптеры, позволяющие подключать монитор к шине компьютера, называли видеоадаптерами и подразделяли на алфавитно-цифровые и графические. Последние, естественно, кроме графической, позволяли выводить и текстовую информацию. Вся выводимая информация формировалась в результате действия и под управлением системных и прикладных программ.
По мере «взросления», на PC стали взваливать и казавшуюся ранее неподъемной ношу воспроизведения и обработки движущихся телевизионных изображений — так называемого «живого видео». Так назрела необходимость корректировки терминологии. Видеосистема современного компьютера состоит из обязательной графической (формирующей изображение программно) и дополнительной подсистемы обработки видеоизображений. Обе эти составляющие части обычно используют общий монитор, а соответствующие аппаратные средства системного блока могут располагаться на раздельных картах различного функционального назначения или объединяться на одном комбинированном адаптере, который можно назвать адаптером дисплея (Display Adapter).
Графический адаптер служит для программного формирования графических и текстовых изображений и является промежуточным элементом между монитором и шиной компьютера. Изображение строится по программе, исполняемой центральным процессором, в чем ему могут помогать графические акселераторы и сопроцессоры. В BIOS имеется поддержка функций формирования текстовых и, графических изображений, по старинке называемая видеосервисом (BIOS Int lOh). Существует ряд классов адаптеров (MDA, CGA, EGA, VGA, SVGA...), которые будут рассмотрены ниже. В монитор адаптер посылает сигналы управления яркостью лучей RGB (Red, Green, Blue — красный, зеленый и синий — базисные цвета) и синхросигналы строчной и кадровой разверток. Кроме этих сигналов, относящихся только к формированию изображения, интерфейс с монитором может содержать и сигналы обмена конфигурационной информацией между монитором и компьютером. Так, например, PnP-мониторы при наличии соответствующей поддержки адаптером способны сообщать системе свои параметры (модель и параметры синхронизации).
Средства работы с видеоизображениями, передаваемыми в стандартах PAL, SECAM или NTSC, относятся уже к мультимедийному оборудованию. От программно-управляемых графических средств они отличаются тем, что оперируют с «живым» изображением, поступающим в компьютер извне (с видеокамеры, TV-тюнера) или воспроизводимым с какого-либо носителя информации (например, CD-ROM или DVD).
Все компоненты дисплейного адаптера могут размещаться на одной карте расширения, а зачастую они устанавливаются прямо на системной плате, используя преимущества локального подключения. Мультимедийные средства могут размещаться на отдельных картах, связанных с графическим адаптером специальным интерфейсом, а могут быть выполнены и в виде небольшого «дочернего» модуля, устанавливаемого на графическую карту.
Стандартизацией в области видеосистем занимается международная организация VESA (Video Electronic Standard Association — ассоциация по стандартизации в области видеоэлектроники, доступная по адресу https://www.vesa.org). Благодаря ее усилиям обеспечивается совместимость как на уровне аппаратных средств, так и на уровне программного обеспечения.
С самого начала появления персонального компьютера его видеосистему стремились строить для максимального приближения к идеалу WYSIWYG (What You See Is What You Get) — что видишь, то и имеешь, или наоборот. Поскольку под словом «имеешь» чаще всего подразумевается некоторая отпечатанная продукция, то имеется и идеал WYSIWYP (What You See Is What You Print) — что видишь на мониторе, то и будет напечатано. Стремление к этим идеалам, подкрепленное техническим прогрессом, приводит к неуклонному росту качественных показателей видеосистемы и проникновению компьютерных технологий в такие области, как, например, хранение точных (!) копий произведений искусства в электронном виде.
Принципы вывода изображений
Видеосистема PC ориентирована на растровый метод вывода изображения. Растровый метод подразумевает, что некий рисующий инструмент, способный оставлять видимый след, сканирует всю поверхность, на которую выводится изображение. Траектория движения инструмента постоянна и не зависит от выводимого изображения, но инструмент может рисовать, а может и не рисовать отдельные точки траектории. Видимым изображением являются оставленные им точки. В случае видеомонитора инструментом является модулированный луч (или три луча базисных цветов), построчно сканирующий экран и вызывающий свечение люминофора, нанесенного на внутреннюю поверхность экрана. Каждая строка растра разбивается на некоторое количество точек — пикселов (Pixel — сокращение от Picture Element — элемент изображения), засветкой каждой из которых по отдельности может управлять устройство, формирующее изображение (например, графическая карта). Видеомонитор является растровым устройством вывода динамически изменяемых изображений. Его луч сканирует экран с частотой, которая не должна позволять глазу видеть мерцание изображения. Матричные дисплеи, применяемые в блокнотных ПК, также относятся к растровым устройствам. Растровыми устройствами вывода статических изображений являются принтеры, в которых сканирование листа производится однократно (хотя возможны и многократные проходы).
Альтернатива растровым устройствам — векторные устройства вывода изображений. В этих устройствах инструмент прорисовывает только изображаемые фигуры и его траектория движения определяется выводимым изображением. Изображение состоит из графических примитивов, которыми могут быть отрезки прямых — векторы (откуда и название метода вывода), дуги, окружности. К векторным устройствам вывода статических изображений относятся перьевые плоттеры. Существовали (а, может, где-то используются и сейчас) и векторные мониторы, однако ввиду сложности построения системы управления лучом, обеспечивающей быстрое и точное движение луча по сложной траектории, эта линия угасла. Рассмотрим растровую систему вывода изображений, подразумевая в качестве оконечного устройства монитор с электронно-лучевой трубкой — CRT (Catode Ray Terminal, дословно — монитор на катодно-лучевой трубке). Сканирование экрана модулированным лучом обеспечивается генераторами горизонтальной и вертикальной разверток монитора. Луч может оставлять след только во время прямого хода по строке (слева направо). Строка разбивается на некоторое количество точек разложения, каждая из которых может иметь состояние (яркость и цвет), не зависимое от других (для монитора это разбиение условно). На обратном ходе по строке луч принудительно гасится. Следующая строка прорисовывается параллельно предыдущей, но с некоторым вертикальным смещением (вниз), и так происходит сканирование до окончания кадра — достижения правого нижнего угла экрана. Во время обратного хода луча по вертикали, за время которого генератор горизонтальной развертки успеет сделать несколько строчных циклов, луч также принудительно гасится. В следующем кадре сканирование может производиться по-разному. В системах с прогрессивной (Progressive), или нечередующейся (N1 — Noninterlaced), разверткой луч идет по тем же самым строкам (рис. 1, а). В системах с чересстрочной разверткой (IL — Interlaced) луч пойдет по строкам, смещенным по вертикали на половину шага строки (рис. 1, б). Таким образом, всю поверхность экрана луч проходит за два цикла кадровой развертки, называемых полукадрами. Чересстрочная развертка позволяет почти вдвое снизить частоту горизонтальной (строчной) развертки, а следовательно, и темп вывода точек изображения. Выгода от этого снижения будет понятна позже, а пока поясним, как определяются частоты развертки.
![]() |
Рисунок 1. Сканирование экрана: а – прогрессивная развертка; б – чересстрочная развертка
Как известно, глаз является инерционным органом зрения — он воспринимает изменение яркости или освещенности только до какой-то определенной частоты. Существует понятие критической частоты световых мельканий (КЧСМ), которую измеряют так: человек смотрит неподвижно на некоторый безынерционный источник света (например, светодиод), который вспыхивает и гаснет с плавно повышаемой частотой. Сначала человек воспринимает вспышки по отдельности, с повышением частоты он видит уже только мерцание, а начиная с некоторой частоты, мерцания для него сливаются в ровный свет. Эта частота и называется критической, и у разных людей она может находиться в пределах примерно 40-60 Гц. Неподвижность взгляда и источника в нашем опыте оговаривалась, поскольку при движении мелькающего объекта человек будет его воспринимать как трассу прерывистых светящихся точек (стробоскопический эффект). Наблюдение мерцающих объектов раздражает и утомляет зрительную систему, поэтому частота кадров (прорисовки экрана) должна быть, по крайней мере, не ниже значения КЧСМ. Таким образом, мы получили ориентировочное значение минимальной частоты кадров, равное 50 Гц (эта компромиссная частота применяется во многих телевизионных системах). Теперь посмотрим, что из этого следует. Вполне очевидно, что для качественного изображения экран должен иметь как можно больше точек матрицы разложения — то есть строк в кадре и точек на строке. Возьмем популярный режим 800x600 (600 строк по 800 точек). За один период прогрессивной кадровой развертки луч должен успеть прочертить 600 видимых строк, да еще некоторое количество невидимых строк (примерно 50) он прочертит на обратном ходе по кадру. Получается, что частота строк должна составить 50 Гц * (600 + 50) = 32,5 кГц (вроде и не так уж много). Этой частоте соответствует период около 30 мкс (1/32,5), из которого на прямой ход по строке остается около 25 мкс. За это время необходимо вывести 800 точек строки, так что на каждую точку отводится 25/800 = 0,03 мкс, что соответствует частоте вывода точек в 30 МГц, а это для электронных схем уже высокая частота. Поскольку соседние точки выводимого изображения в принципе друг с другом не связаны, то полоса частот сигнала, модулирующего интенсивность луча, должна быть несколько выше этого значения (примерно на 25 %). Такую широкую полосу пропускания должен обеспечивать весь видеотракт: видеоусилители модуляторов лучей, сигнальные линии интерфейсного кабеля, и, наконец (вернее, сначала), такой широкополосный сигнал должен сформировать графический адаптер. На всех этих стадиях высокие частоты порождают технические проблемы. Если реальная полоса пропускания в этом тракте будет уже, четкого изображения получить не удастся — переходы будут размыты. Если же частотная характеристика тракта в требуемом диапазоне будет неравномерной, появятся специфические искажения цветов или яркости около границ отображаемых объектов (справа от граничной линии). Понятно, что с технической точки зрения есть стимулы снижать требуемую верхнюю границу полосы частот видеотракта. При чересстрочной развертке за каждый полукадр сканируется только половина строк разложения (четные в одном полукадре и нечетные в другом), следовательно, строчная частота уменьшается, а длительность прохода видимой части строки увеличивается примерно вдвое. Таким образом, при заданных условиях (разрешении экрана и ограничении минимальной кадровой частоты) чересстрочная развертка позволяет снизить требуемую полосу пропускания вдвое.
Как видно из вышеприведенных выкладок, частотные параметры видеосистемы определяются, исходя из желаемой частоты кадров, разрешения экрана и режима развертки. Заботясь о зрении пользователя, частоту кадров стремятся повышать. При низкой частоте экран начинает мерцать, что особо заметно на больших белых полях изображения (в полном смысле слова яркий тому пример — белый фон в приложениях Windows). Разрешение экрана стремятся увеличить — чем оно выше, тем больше информации можно уместить на экране. Поскольку размер экрана постоянно увеличивается — монитор на 19" является уже нормой для многих видов деятельности, — потребность в разрешении, скажем, 1600 х 1200 вполне реальна. Но по нашим выкладкам для этого уже требуется полоса 120 МГц (а кадровая частота 50 Гц — это отнюдь не идеал). Применение чересстрочной развертки годится лишь как вынужденная мера, поскольку имеет свои специфические неприятные «видеоэфекты»: если выводится тонкая (в одну строку точек) горизонтальная линия, она будет заметно мерцать. Это и понятно, ведь прорисовывается она только в одном из полукадров, следовательно, с половинной кадровой частотой. Если изображение потолще (один и тот же элемент имеет точки в соседних строках), его мерцание будет почти незаметным. Итак, вожделенные цели ясны: частота кадров — выше, разрешение (по вертикали и горизонтали) — больше, развертка — не чересстрочная (Non Interlaced). Забегая немного вперед, заметим, что чем выше частота развертки, тем ниже производительность графической системы при построении изображений. С точки зрения пользователя, привлекательность чересстрочного режима развертки заключается в цене устройств — поскольку для прогрессивной развертки требуется более высокое качество компонентов всего видеотракта, построчная развертка с высокой частотой кадров при режимах высокого разрешения — дорогое удовольствие. Но для профессиональной работы с текстом, графического дизайна и других видов деятельности ухудшение зрения обойдется дороже. Чересстрочная развертка широко применяется в телевидении, где видеосигнал приходится «пропихивать» через радиоканал, с шириной полосы которого всегда имеются проблемы. Современные мониторы и графические адаптеры, применяемые в PC, используют оба режима развертки с различными значениями частоты кадров. Естественно, что работать они должны в согласованных режимах.
Рассмотрев работу конечного устройства (монитора), обсудим способы формирования изображения в графическом адаптере. Итак, у нас имеется матрица точек экрана, образованная горизонтальными строками растра (номер строки — вертикальная координата матрицы) и точками разложения строки (номер точки в строке — горизонтальная координата матрицы). Эта матрица сканируется построчным или чересстрочным образом, и во время прямого хода луча по видимым строкам графический адаптер должен формировать сигналы управления яркостью базисных цветов монитора (или одного сигнала яркости в монохромном варианте). За это время последовательно (и синхронно с ходом луча) должна выводиться информация о яркости и цвете всех точек данной строки. Синхронизация обеспечивается формированием горизонтальных и вертикальных синхроимпульсов. Таким образом, графический адаптер является задающим устройством, а монитор со своими генераторами разверток должен вписаться в заданные параметры синхронизации.
Существуют два основных режима вывода информации — графический и символьный (текстовый). Хотя исторически первые видеосистемы работали в символьном режиме, начать объяснение работы удобнее с графического.
Графический режим
В графическом режиме имеется возможность индивидуального управления свечением каждой точки экрана монитора независимо от состояния остальных. Этот режим обозначают как Gr (Graphics) или АРА (All Points Addressable — все точки адресуемы). В графическом режиме каждой точке экрана — пикселу — соответствует ячейка специальной памяти, которая сканируется схемами адаптера синхронно с движением луча монитора. Точнее было бы сказать наоборот — физически движение луча вторично, так как монитор можно и не подключать, а графический адаптер все равно будет сканировать память, но логически вся конструкция строится, исходя именно из поведения монитора. Эта постоянно циклически сканируемая (с кадровой частотой) память называется видеопамятью (Video Memory), или VRAM (Video RAM). Последнее сокращение можно спутать с названием специализированных микросхем динамической памяти, оптимизированной именно под данное применение. Процесс постоянного сканирования видеопамяти называется регенерацией изображения, и, к счастью, этого же сканирования оказывается достаточно для регенерации информации микросхемам динамической памяти, применяемой в этом узле. Для программно-управляемого построения изображений к видеопамяти также должен обеспечиваться доступ со стороны системной магистрали компьютера, причем как по записи, так и по чтению. Количество бит видеопамяти, отводимое на каждый пиксел, определяет возможное число состояний пиксела — цветов, градаций яркости или иных атрибутов (например, мерцание). Так, при одном бите на пиксел возможны лишь два состояния — светится или не светится. Два бита на пиксел доставляли немало удовольствия любителям цветных игрушек даже на адаптерах CGA — можно было иметь одновременно четыре цвета на экране. Четыре бита на пиксел (16 цветов), обеспечиваемые адаптером EGA, были достаточны для многих графических приложений (например, графики в САПРах). Пределом мечтаний в свое время было 256 цветов (8 бит на пиксел) адаптера VGA — цветная фотография розы из комплекта графического редактора Paintbrush на экране монитора казалась великолепной. Сейчас остановились на режимах High Color (16 бит; 65 536 цветов), и True Color — «истинный цвет» — (24 бит; 16,7 миллиона цветов), реализуемых современными адаптерами и мониторами SVGA. 24 бита распределяются между базисными цветами R:G:B поровну (5:5:5 и 8:8:8), 16 бит — с учетом особенностей цветовосприятия неравномерно (5:6:5 или 6:6:4). Логически видеопамять может быть организована по-разному, в зависимости от количества бит на пиксел.
В случае одного или двух бит на пиксел вполне логично, что каждая ячейка (байт) соответствует восьми или четырем соседним пикселам строки (рис. 2). При сканировании ячейка считывается в регистр сдвига, из которого информация о соседних точках последовательно поступает на выходные цепи адаптера. Такой способ отображения называется линейным — линейной последователь-ности пикселов соответствует линейная последовательность бит (или групп бит) видеопамяти.
В адаптере EGA количество бит на пиксел увеличили до четырех и видеопамять разбили на четыре области-слоя, называемых также и цветовыми плоскостями (рис. 8.3). В каждом слое используется линейная организация, где каждый байт содержит по одному биту восьми соседних пикселов. Слои сканируются (считываются в сдвиговые регистры) одновременно, в результате параллельно формируются по четыре бита на каждый пиксел. Такое решение позволяет снизить частоту считывания ячеек памяти — одна операция чтения производится за время прохода лучом восьми пикселов. Забота о снижении частоты считывания понятна — быстродействие памяти ограничено, а ведь в эту память нужно информацию когда-то и записывать. Ячейки слоев, отвечающие за одни и те же пикселы, имеют совпадающий адрес. Это позволяет производить параллельную запись информации сразу в несколько цветовых плоскостей (запись для каждого слоя разрешается индивидуально), что также экономит время. Считывание со стороны магистрали, конечно, возможно только послойное.
![]() |
Рисунок 2. Линейное отображение пикселов в видеопамяти: а – 1 бит на пиксел;
б – 2 бита на пиксел
![]() |
Рисунок 3. Многослойное отображение пикселов в видеопамяти
В режимах 8, 16 и 24 бит на пиксел также используется линейная организация, но каждый байт (слово или три байта) отвечает уже за цвет одного пиксела. Многоплоскостная организация здесь уже была бы неэффективной.
Вышеописанные варианты организации видеопамяти — и линейный, и многоплоскостной — представляют собой отображение матрицы пикселов экрана на биты видеопамяти — Bit Mapping. Растровый формат хранения изображений, при котором биты так или иначе отображают пикселы, называется битовой картой (BitMap). С точки зрения плотности хранения графической информации этот формат не самый эффективный, но в видеопамяти растрового дисплея вследствие высокого темпа вывода информации при регенерации изображения иной формат неприемлем. В векторных дисплеях, о которых мы упоминали, в памяти хранились только векторные описатели фигур, что для контурных изображений обычно оказывается компактнее.
Объем видеопамяти (в битах), требуемый для хранения образа экрана, определяется как произведение количества пикселов в строке на количество строк и на количество бит на пиксел. Так, для режима HGC 720 х 350 с одним битом на точку он составляет 252 000 бит или около 31 Кбайт, а 800 х 600 х 256 цветов — 480 000 бит или около 469 Кбайт. Если физический объем видеопамяти превышает необходимый для отображения матрицы всего экрана, видеопамять можно разбить на страницы. Страница — это область видеопамяти, в которой умещается образ целого экрана. При многостраничной организации видеопамяти только одна из них может быть активной — отображаемой на экран. Этим страницы принципиально отличаются от слоев, которые отображаются одновременно.
Формирование битовой карты изображения в видеопамяти графического адаптера производится под управлением программы, исполняемой центральным процессором. Сама по себе задача формирования процессору вполне по силам, но при ее решении требуется пересылка большого объема информации в видеопамять, а для многих построений еще и чтение видеопамяти со стороны процессора. Видеопамять большую часть времени занята выдачей информации схемам регенерации изображения в довольно напряженном темпе. От этого процесса она свободна только во время обратного хода луча по строке и кадру, но это меньшая часть времени. Если обращение к активной странице видеопамяти со стороны процессора происходит во время прямого хода и быстродействия схем адаптера недостаточно для того, чтобы это обращение вписалось между соседними выборками процесса регенерации, на экране появится штрих от несчитанной информации пикселов. Если такое обращение происходит часто, на экране появляется «снег», что неприятно. Дожидаться обратного хода по строке или кадру накладно: строчный период коротких (несколько микросекунд) интервалов обратного хода имеет порядок 25 мкс, а кадровый период длинного (миллисекунды) обратного хода имеет порядок 20 мс, в то время как цикл обращения процессора к обычной памяти не превышает сотен (у современных компьютеров — десятков) наносекунд. Так что канал связи процессора с видеопамятью представляет собой узкое горлышко, через которое пытаются протолкнуть немалый поток данных, причем чем более высокое разрешение экрана и чем больше цветов (бит на пиксел), тем этот поток должен быть интенсивнее. Конечно, при выводе статической картинки это вроде и не страшно, но «оживить» изображение оказывается проблематично. Выходов из этого затруднения имеется несколько. Во-первых, повышают быстродействие видеопамяти. Во-вторых, расширяют разрядность шин графического адаптера, причем как внутренней (шины видеопамяти), так и интерфейсной, и применяют высокопроизводительные шины (раньше локальную VLB, теперь PCI или порт AGP). Расширение разрядности позволяет за один цикл обращения передать большее количество бит данных — повысить производительность. Однако если у адаптера, к примеру VGA, разрядность интерфейсной шины — 16 бит, а установлен минимальный объем памяти, при котором используется только 8 бит, то эффективная разрядность интерфейса окажется всего 8 бит. То же относится и к адаптерам с 32-разрядной шиной. Этим объясняется не совсем очевидный факт, что производительность графического адаптера зависит от объема установленной видеопамяти. В-третьих, повысить скорость видеопостроений можно кэшированием видеопамяти или затенением видеопамяти, что, по сути, почти одно и то же. В этом случае при записи в область видеопамяти данные будут записаны как в видеопамять, так и в ОЗУ (или даже в кэш), а при считывании из этой области обращение будет только к быстродействующему ОЗУ. И в-четвертых, можно принципиально сократить объем информации, передаваемой графическому адаптеру, но для этого графический адаптер должен быть наделен «интеллектом». В современных компьютерах используются все эти решения.
Под интеллектом графического адаптера подразумевается наличие на его плате собственного процессора, способного формировать растровое изображение в видеопамяти (bitmap) по командам, полученным от центрального процессора. Команды ориентируются на наиболее часто используемые методы описания изображений, которые строятся из отдельных графических элементов более высокого уровня, чем пикселы.
Команды рисования (Drawing Commands) обеспечивают построение графических примитивов — точки, отрезка прямой, прямоугольника, дуги, эллипса. Примитивы такого типа в командах описываются в векторном виде, что гораздо компактнее, чем их растровый образ. Таким образом, удается значительно сократить объем передаваемой графической информации за счет применения более эффективного способа описания изображений. К командам рисования относится и заливка замкнутого контура, заданного в растровом виде, некоторым цветом или узором (pattern). Она ускоряется особенно эффективно: при программной реализации процессор должен просмотреть содержимое видеопамяти вокруг заданной точки, двигаясь по всем направлениям до обнаружения границы контура и изменяя цвет пикселов на своем пути. При этом требуется чтение большого объема данных видеопамяти, их анализ и запись модифицированных данных обратно в видеопамять. Процессор интеллектуального адаптера способен выполнить эту операцию быстро и без выхода с этим потоком данных на внешнюю магистраль.
Копирование блока с одного места экрана на другое применяется для «прокрутки» изображения экрана в разных направлениях. Эта команда сводится к пересылке блока бит — BitBlT (Bit Block Transferring), и эта операция интеллектуальным адаптером может быть сильно ускорена.
Для формирования курсора на графическом экране применяют команды работы со спрайтами. Спрайт (Sprite) — небольшой прямоугольный фрагмент изображения, который может перемещаться по экрану как единое целое. Перед использованием его программируют — определяют размер и растровое изображение для него, после этого он может перемещаться по экрану, для чего достаточно только указывать его координаты.
Аппаратная поддержка окон (Hardware Windowing) упрощает и ускоряет работу с экраном в многозадачных (многооконных) системах. На традиционном графическом адаптере при наличии нескольких, возможно, перекрывающих друг друга окон программе приходится отслеживать координаты обрабатываемых точек с тем, чтобы не выйти за пределы своего окна. Аппаратная поддержка окон упрощает вывод изображений: каждой задаче выделяется свое окно — область видеопамяти требуемого размера, в котором она работает монопольно. Взаимное расположение окон сообщается интеллектуальному адаптеру, и он для регенерации изображения синхронно с движением луча по растру сканирует видеопамять не линейно, а перескакивая с области памяти одного окна на другое.
Если объем видеопамяти превышает необходимый для данного формата экрана и глубины цветов, то в ней можно строить изображение, превышающее по размеру отображаемую часть. Интеллектуальному адаптеру можно поручить панорамирование (Panning) — отображение заданной области. При этом горизонтальная и вертикальная прокрутка изображения не потребует операций блочных пересылок (конечно, в пределах сформированного большого изображения) — для перемещения достаточно лишь изменить указатель положения.
Вышеописанные функции интеллектуального адаптера относятся к двумерной графике (2D). Современные графические адаптеры берут на себя и многие функции построения трехмерных изображений, о чем более подробно рассказано в главе 4. Трехмерное изображение должно состоять из ряда поверхностей различной формы. Эти поверхности «собираются» из отдельных элементов-полигонов, чаще треугольников, каждый из которых имеет трехмерные координаты вершин и описание поверхности (цвет, узор). Перемещение объектов (или наблюдателя) приводит к необходимости пересчета всех координат. Для создания реалистичных изображений учитывается перспектива — пространственная и атмосферная (дымка или туман), освещенность поверхностей и отражение света от них, прозрачность и многие другие факторы.
Ускорение построений в интеллектуальном адаптере обеспечивается несколькими факторами. Во-первых, это сокращение объема передачи по магистрали. Во-вторых, во время работы процессора адаптера центральный процессор свободен, что ускоряет работу программ даже в однозадачном режиме. В-третьих, процессор адаптера, в отличие от процессора с самой сложной в мире системой команд — представителя семейства х86, ориентирован на выполнение меньшего количества инструкций, а потому способен выполнять их гораздо быстрее центрального. И, в-четвертых, скорость обмена данных внутри адаптера может повышаться за счет лучшего согласования обращений к видеопамяти для операций построения с процессом регенерации изображения, а также за счет расширения разрядности внутренней шины данных адаптера. В графических адаптерах конца 90-х годов широко применялась двухпортовая видеопамять VRAM и WRAM с разрядностью внутренней шины 64 бит (при 32-битной шине внешнего интерфейса). Современные адаптеры с SD-акселераторами (самые критичные к производительности памяти) строятся на памяти SGRAM (SDRAM) со 128-разрядной шиной, а в самых мощных применяется память с удвоенной частотой передачи DDR SDRAM. Правда, и здесь полная разрядность шины (но уже внутренней) может и не использоваться при малом объеме установленной видеопамяти. Разрядность шины пока дальше не увеличивают, но встречаются адаптеры и с двойной внутренней шиной, способной работать в полнодуплексном режиме.
По отношению к центральному процессору и оперативной памяти компьютера различают графические сопроцессоры и акселераторы. Графический сопроцессор представляет собой специализированный процессор с соответствующим аппаратным окружением, который подключается к шине компьютера и имеет доступ к его оперативной памяти. В процессе своей работы сопроцессор пользуется оперативной памятью, конкурируя с центральным по доступу и к памяти, и к шине. Графический акселератор работает автономно и при решении своей задачи со своим огромным объемом данных может и не выходить на системную шину. Акселераторы являются традиционной составляющей частью практически всех современных графических адаптеров. Акселераторы двумерных операций (2D-accelerators), необходимых для реализации графического интерфейса пользователя GUI (Graphic User Interface), часто называют Windows-акселераторами, поскольку их команды обычно ориентированы на функции этой популярной операционной системы. Более сложные акселераторы выполняют и трехмерные построения, их называют SD-акселераторами.
Для построения сложных трехмерных изображений графическому акселератору будет явно тесно в ограниченном объеме видеопамяти. Для обеспечения доступа к основной памяти компьютера он должен иметь возможность управления шиной (bus mastering). Специально для мощных графических адаптеров в 1996 году появился новый канал связи с памятью — AGP (Accelerated Graphic Port). Обеспечив высокую пропускную способность порта, разработчики AGP предложили технологию DIME (Direct Memory Execute). По этой технологии графический акселератор является мастером шины AGP и может пользоваться основной памятью компьютера для своих нужд при трехмерных построениях. Например, в основной памяти могут храниться текстуры, которые акселератор накладывает на трехмерные поверхности. При этом снимается ограничение на размер описания текстур, которые без AGP приходится держать в ограниченном объеме видеопамяти. На дешевое решение проблемы «тесноты» нацелена и архитектура однородной памяти UMA, которая может быть реализована с помощью AGP. Однако AGP позволяет сохранить и локальную память на графическом адаптере (видеобуфер) и расширение доступной памяти не отзывается снижением производительности.
Итак, мы рассмотрели варианты организации видеопамяти и кратко обсудили способы формирования в ней битовой карты изображения. При регенерации на выходе видеопамяти (или сдвиговых регистров) имеется некоторое количество бит, отвечающих за раскраску текущего выводимого пиксела. Количеством этих бит N определяется максимальное число цветов, присутствующих на экране С = 2N. Однако трактовать эти биты можно по-разному. При одном бите на пиксел и монохромном мониторе трактовка в принципе однозначна (светится — не светится), хотя были мониторы, допускающие реверс изображения. При двух битах на точку возможности цветного монитора, у которого можно управлять тремя цветами, используются ограниченно: монитор обеспечивает по крайней мере 8 цветов, а адаптер может выдать только 4. Для смягчения этого дисбаланса применили так называемую технику палитр (Palette). Ее суть заключается в том, что биты одного пиксела, поступающие с видеопамяти, перед выходом в интерфейс монитора проходят через некоторый управляемый преобразователь. Выход этого преобразователя имеет разрядность, поддерживаемую интерфейсом монитора, и биты видеопамяти задают номер цвета в выбранной палитре цветов. Переключив палитру (или перепрограммировав ее набор цветов), можно получить другую гамму цветов на экране, но одновременно будет присутствовать не более 2м цветов.
Текстовый режим
В символьном, или текстовом, режиме формирование изображения происходит несколько иначе. Если в графическом режиме (АРА) каждой точке экрана соответствует своя ячейка видеопамяти, то в текстовом режиме ячейка видеопамяти хранит информацию о символе, занимающем на экране знакоместо определенного формата. Знакоместо представляет собой матрицу точек, в которой может быть отображен один из символов определенного набора. Здесь умышленно применяется слово «точка», а не «пиксел», поскольку пиксел является сознательно используемым элементом изображения, в то время как точки разложения символа, в общем случае, программиста не интересуют. В ячейке видеопамяти хра