Блиттер

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Блиттер (англ. Blitter) — первоначально микросхема или часть графического сопроцессора, осуществляющая быстрое копирование и наложения фрагментов изображений в памяти (данный процесс называется бит-блит), благодаря чему освобождаются ресурсы центрального процессора и ускоряется работа с графикой. Название происходит от акронима BLIT (англ. BLock Image Transfer). Основное применение блиттер находил в работе с 2D-графикой и связанных с ней преобразованиях.

Необходимость в блиттере

[править | править код]

Первоначально при обработке растровых изображений использовались участки основной памяти, которые обрабатывались ЦПУ. Работа с графикой (поддержка спрайтов, заливка области цветом,) могла требовать много ресурсов.

С совершенствованием графического оборудования (кадровый буфер) стали поддерживаться более высокие разрешения и глубина цвета. Для игр, использовавших графические функции в полном объёме, при обычном подходе потребовались бы большие скорости при многократных пересылках данных в памяти. Подобная работа занимает много ресурсов у ЦПУ, отнимая у него время на работу с другими задачами.

Блиттинг является не единственным решением для высокопроизводительной обработки графики. Более распространённым решением было использование технологии спрайтов. Небольшие изображения (спрайты) располагались поверх фонового изображения независимо от него. Как правило, видеочип при выводе на дисплей очередной горизонтальной строки пикселей (сканлайна) экрана анализировал, какие спрайты на неё попали и для каждого выводимого пикселя заднего фона проверял, не перекрывается ли он пикселями спрайтов, подменяя цвет при необходимости. Это устраняло необходимость массивного копирования памяти процессором, но требовало от видеочипа частого доступа к памяти спрайтов, которая нередко поэтому выделялась в отдельный банк физической памяти.

Недостатком такого подхода было то, что логика обработки спрайтов была жёстко задана в микросхеме, и число одновременно обрабатываемых изображений было ограничено — от двух (Atari 2600) до восьми (Commodore 64) спрайтов, а такая игровая консоль как Famicom/NES могла выводить до 64 спрайтов на экране, но не более 8 спрайтов в одной строке, при большем их числе они как правило начинали характерно «перемигиваться», отключаясь и включаясь в разном порядке.

В технологии блиттера количество объектов ограничено только производительностью самого устройства и объёмом используемой им памяти. С ростом производительности компьютеров это преимущество перечеркнуло плюсы использования спрайтов, и в конце концов системы обработки спрайтов трансформировались в блиттеры. Тем не менее, почти все компьютеры с появлением манипуляторов типа «мышь» умеют выводить как минимум один аппаратный спрайт — собственно курсор мыши.

Появление блиттера в компьютерах

[править | править код]
Процессор, выполняющий функции блиттера в компьютерах семейства Atari ST

Чтобы решить проблему, разработчики компьютеров создали специальное устройство. При обработке графики ЦПУ посылало описание требуемой бит-блит операции блиттеру, который параллельно обрабатывал большинство операций с 2D-графикой и тем самым ускорял работу приложений.

Впервые устройства, похожие на работу блиттера, появились в игровых консолях Bally Astrocade, славившихся богатыми для того времени возможностями обработки графики. В консоли был выделен участок памяти до адреса 0x4000, при попытке записи в который вызывался графический чип.

Устройство, полностью реализующее функции блиттера, впервые появились в компьютерах Commodore Amiga, на которое компания Commodore получила патент US 4874164.[1] В этом патенте было введено понятие «блиттер» как «устройство персонального компьютера для блочного копирования данных растровых изображений» (англ. Personal computer apparatus for block transfer of bit-mapped image data).

Блиттеры в современных компьютерах

[править | править код]

Все современные графические процессоры обладают функциями, присущими возможностям блиттера, однако доступ к ним скрыт и не рекомендуется, особенно при работе с трёхмерной графикой.

Современные API (Direct3D[2] и OpenGL) заставляют описывать весь кадр, а затем отрисовывать его с нуля. Перемещение данных непосредственно в кадровом буфере менее эффективно и может рассматриваться как плохой подход в программировании. Современные устройства уже обладают набором функций для обработки изображений (вращение, изменение масштаба и прозрачности), которые легко доступны через API. Использование текстур при отрисовке полигонов делают блиттеры устаревшими. Однако данная технология нашла своё применение в современных графических подсистемах с низким энергопотреблением.

Примечания

[править | править код]