Формирование битовой карты изображения (ликбез).
Формирование битовой карты изображения в видеопамяти графического адаптера производится под управлением программы, исполняемой центральным процессором. Сама по себе задача формирования процессору вполне по силам, но при ее решении требуется пересылка большого объема информации в видеопамять, а для многих построений еще и чтение видеопамяти со стороны процессора.
Видеопамять большую часть времени занята выдачей информации схемам регенерации изображения в довольно напряженном темпе (например, 50 кадров в секунду). От этого процесса она свободна только во время обратного хода луча по строке и кадру, но это меньшая часть времени. Если обращение к активной странице видеопамяти со стороны процессора происходит во время прямого хода и быстродействия схем адаптера недостаточно для того, чтобы это обращение вписалось между соседними выборками процесса регенерации, на экране появится штрих от несчитанной информации пикселов. Если такое обращение происходит часто, на экране появляется «снег», что неприятно.
Дожидаться обратного хода по строке или кадру накладно: строчный период коротких (несколько микросекунд) интервалов обратного хода имеет порядок 25 мкс, а кадровый период длинного (миллисекунды) обратного хода имеет порядок 20 мс, в то время как цикл обращения процессора к обычной памяти не превышает сотен (у современных компьютеров — десятков) наносекунд. Так что канал связи процессора с видеопамятью представляет собой узкое горлышко, через которое пытаются протолкнуть немалый поток данных, причем чем более высокое разрешение экрана и чем больше цветов (бит на пиксел), тем этот поток должен быть интенсивнее.
Можно принципиально сократить объем информации, передаваемой графическому адаптеру, но для этого графический адаптер должен быть наделен «интеллектом».
Под интеллектом графического адаптера подразумевается наличие на его плате собственного процессора, способного формировать растровое изображение в видеопамяти (bitmap) по командам, полученным от центрального процессора.
Видеоадаптер.
Центральный Процессор выполняя программу формирует и затем передает изображение (кадр) на экран монитора через видеоадаптер.
Рис. 1. Простейший видеоадаптер.
Главной целью простой видеоплаты является получение информации от процессора и вывод ее на монитор. Когда программе требуется вывести данные, она должна сообщить процессору, чтобы он сохранил эти данные на видеоплате. Конкретный способ работы процессора с видеоплатой имеет определенные вариации, но существуют два основных типа видеоплат:
- с буферным запоминающим устройством (обычно на кадр) см. рис.1;
- и платы с процессором/ускорителем см. рис. 2.
Рис. 2. Плата простейшего видеоакселератора.
Рис. 3. Видеоконтроллер (с рис. 2).
Для сокращения объема информации, передаваемой от Центрального Процессора графическому адаптеру, графический адаптер наделен «интеллектом».
На его плате имеется собственный мощный специализированный процессор, способный формировать и изменять растровое изображение в видеопамяти (bitmap) по командам, полученным от центрального процессора.
Команды ориентируются на наиболее часто используемые методы описания изображений, которые строятся из отдельных графических элементов более высокого уровня, чем пикселы.
Команды рисования.
Команды, рисования (Drawing Commands) обеспечивают построение графических примитивов — точки, отрезка прямой, прямоугольника, дуги, эллипса. Примитивы такого типа в командах описываются в векторном виде, что гораздо компактнее, чем их растровый образ. Таким образом, удается значительно сократить объем передаваемой графической информации за счет применения более эффективного способа описания изображений.
К командам рисования относится и заливка замкнутого контура, заданного в растровом виде, некоторым цветом или узором (pattern). Она ускоряется особенно эффективно: при программной реализации процессор должен просмотреть содержимое видеопамяти вокруг заданной точки, двигаясь по всем направлениям до обнаружения границы контура и изменяя цвет пикселов на своем пути. При этом требуется чтение большого объема данных видеопамяти, их анализ и запись модифицированных данных обратно в видеопамять. Процессор интеллектуального адаптера способен выполнить эту операцию быстро и не выходя с этим потоком данных на внешнюю магистраль.
Копирование блока.
Копирование блока с одного места экрана на другое применяется для «прокрутки» изображения экрана в разных направлениях. Эта команда сводится к пересылке блока бит — BitBlT (Bit Block Transferring), и эта операция интеллектуальным адаптером может быть сильно ускорена.
Команды работы со спрайтами.
Для формирования курсора на графическом экране применяют команды работы со спрайтами. Спрайт (Sprite) — небольшой прямоугольный фрагмент изображения, который может перемещаться по экрану как единое целое. Перед использованием его программируют — определяют размер и его растровое изображение, после этого он может перемещаться по экрану, для чего достаточно только указывать его координаты.
Аппаратная поддержка окон.
Аппаратная поддержка окон (Hardware Windowing) упрощает и ускоряет работу с экраном в многозадачных (многооконных) системах. На традиционном графическом адаптере при наличии нескольких, возможно перекрывающих друг друга окон программе приходится отслеживать координаты обрабатываемых точек с тем, чтобы не выйти за пределы своего окна. Аппаратная поддержка окон упрощает вывод изображений: каждой задаче выделяется свое окно — область видеопамяти требуемого размера, в котором она работает монопольно.
Взаимное расположение окон сообщается интеллектуальному адаптеру, и он для регенерации изображения синхронно с движением луча по растру сканирует видеопамять не линейно, а перескакивая с области памяти одного окна на другое.
Если объем видеопамяти превышает необходимый для данного формата экрана и глубины цветов, то в ней можно строить изображение, превышающее по размеру отображаемую часть. Интеллектуальному адаптеру можно поручить, панорамирование (Panning) — отображение заданной области. При этом горизонтальная и вертикальная прокрутка изображения не потребует операций блочных пересылок (конечно, в пределах сформированного большого изображения) — для перемещения достаточно лишь изменить указатель положения (этакий «большой спрайт»).
Вышеописанные функции интеллектуального адаптера относятся к примерам по двумерной графике (2D).
Функции построения трехмерных изображений.
Современные графические 3D-адаптеры берут на себя и многие функции построения трехмерных изображений. Не вдаваясь в подробности (это может быть темой отдельной книги), можно сказать, что трехмерное изображение должно состоять из ряда поверхностей различной формы.
Эти поверхности «собираются» из отдельных элементов-полигонов, чаще треугольников, каждый из которых имеет трехмерные координаты вершин и описание поверхности (цвет, узор).
Перемещение объектов (или наблюдателя) приводит к необходимости пересчета всех координат. Для создания реалистичных изображений учитывается перспектива — пространственная и атмосферная (дымка или туман), освещенность поверхностей и отражение света от них, прозрачность и многие другие факторы.
Ускорение построений в интеллектуальном адаптере обеспечивается несколькими факторами.
Во-первых, это сокращение объема передачи по магистрали.
Во-вторых, во время работы процессора адаптера центральный процессор свободен, что ускоряет работу программ даже в однозадачном режиме.
В-третьих, процессор адаптера, (в отличие от процессора с самой сложной в мире системой команд — представителя семейства х86), ориентирован на выполнение меньшего количества инструкций, а потому способен выполнять их гораздо быстрее центрального.
И в-четвертых, скорость обмена данных внутри адаптера может повышаться за счет лучшего согласования обращений к видеопамяти для операций построения, с процессом регенерации изображения, а также за счет расширения разрядности внутренней шины данных адаптера. В современных графических адаптерах широко применяется быстрая двухпортовая видеопамять, а разрядность внутренней шины – 128, 256, 512 разрядов и т.д..