Введение

Часть памяти с произвольным доступом, содержащая растровую карту, которая управляет видеодисплеем. Фреймбуфер (фрейм-буфер, или иногда фреймстор) — это часть памяти с произвольным доступом (RAM), содержащая растровую карту, которая управляет видеодисплеем. Это буфер памяти, содержащий данные, представляющие все пиксели в полном видеокадре. Современные видеокарты содержат в своих ядрах схемы фреймбуфера. Эта схема преобразует растровое изображение в памяти в видеосигнал, который может быть отображен на мониторе компьютера. В вычислительной технике буфер экрана — это часть компьютерной памяти, используемая компьютерным приложением для представления содержимого, которое должно быть отображено на дисплее компьютера. Буфер экрана также может называться видеобуфером, буфером регенерации или сокращенно реген-буфером. Буферы экрана следует отличать от видеопамяти. Для этого также используется термин "буфер вне экрана". Информация в буфере обычно состоит из цветовых значений для каждого пикселя, который будет отображаться на дисплее. Цветовые значения обычно хранятся в 1-битном двоичном (монохромном), 4-битном палитрном, 8-битном палитрном, 16-битном формате высокой цветности и 24-битном формате истинного цвета. Дополнительный альфа-канал иногда используется для сохранения информации о прозрачности пикселей. Общий объем памяти, необходимый для фреймбуфера, зависит от разрешения выходного сигнала и от глубины цвета или размера палитры.

История

Исследователи в области компьютерной техники долгое время обсуждали теоретические преимущества буфера кадров, но не могли создать машину с достаточным объемом памяти по экономически оправданной цене. В 1947 году компьютер Manchester Baby использовал электронно-лучевую трубку Williams, позднее Williams-Kilburn, для хранения 1024 бит в памяти на основе ЭЛТ и отображения на второй ЭЛТ. Другие исследовательские лаборатории изучали эти методы, а лаборатория MIT Lincoln в 1950 году достигла разрешения 4096 точек. В 1969 году А. Майкл Нолл из Bell Labs реализовал сканируемый дисплей с буфером кадров, используя магнитную память на сердечниках. Позднее система Bell Labs была расширена для отображения изображения с цветовой глубиной в три бита на стандартном цветном телевизионном мониторе. В начале 1970-х годов развитие интегральных микросхем MOS-памяти (металл-оксид-полупроводниковая память), особенно высокоплотных микросхем DRAM (динамическая память с произвольным доступом) объемом не менее 1 кб, сделало возможным создание, впервые, цифровой системы памяти с буферами кадров, способными хранить стандартное видеоизображение. Это привело к разработке системы SuperPaint Ричардом Шоупом в Xerox PARC в 1972 году. Шоуп смог использовать буфер кадров SuperPaint для создания ранней системы цифрового захвата видео. Синхронизируя выходной сигнал с входным, Шоуп мог перезаписывать каждый пиксель данных по мере его поступления. Шоуп также экспериментировал с изменением выходного сигнала с помощью цветовых таблиц. Эти цветовые таблицы позволили системе SuperPaint воспроизводить широкий спектр цветов, выходящий за пределы диапазона ограниченных 8-битных данных, которые она содержала. Эта схема впоследствии стала широко распространенной в компьютерных буферах кадров. В 1974 году Evans & Sutherland выпустили первый коммерческий буфер кадров, Picture System, стоимостью около 15 000 долларов. Он мог создавать разрешение до 512x512 пикселей в 8-битной шкале серого и стал настоящим благом для исследователей в области графики, у которых не было средств для создания собственного буфера кадров. Нью-Йоркский технологический институт позже создал первую 24-битную цветовую систему, используя три буфера кадров Evans & Sutherland. Каждый буфер был подключен к выходу RGB (один для красного, один для зеленого и один для синего), а миникомпьютер PDP 11/04 производства Digital Equipment Corporation управлял тремя устройствами как единым целым. В 1975 году британская компания Quantel выпустила первый коммерческий полноцветный буфер кадров для вещания, Quantel DFS 3000. Он впервые был использован при телевизионном освещении Олимпийских игр 1976 года в Монреале для создания вставки с изображением олимпийского огня, в то время как остальная часть изображения показывала бегуна, входящего на стадион. Быстрое развитие технологии интегральных схем позволило многим домашним компьютерам конца 1970-х годов оснащаться буферами кадров с низкой цветовой глубиной. Сегодня почти все компьютеры с графическими возможностями используют буфер кадров для генерации видеосигнала. Компьютеры Amiga, созданные в 1980-х годах, отличались особым вниманием к графической производительности и включали уникальный буфер Hold And Modify, способный отображать 4096 цветов. Буферы кадров также стали популярными на высокопроизводительных рабочих станциях и аркадных системных платах на протяжении 1980-х годов. SGI, Sun Microsystems, HP, DEC и IBM выпустили буферы кадров для своих рабочих станций в этот период. Эти буферы кадров обычно были гораздо более высокого качества, чем те, что можно было найти в большинстве домашних компьютеров, и регулярно использовались в телевидении, печати, компьютерном моделировании и 3D-графике. Sega также использовала буферы кадров для своих высококлассных аркадных плат, которые также превосходили по качеству аналогичные решения для домашних компьютеров.

Режимы отображения

Фреймбуферы, используемые в персональных и домашних компьютерах, часто имели наборы предопределенных режимов работы. Эти режимы перенастраивали аппаратное обеспечение для вывода различных разрешений, глубины цвета, организации памяти и параметров частоты обновления. В мире Unix-систем и операционных систем подобные удобства обычно отвергались в пользу непосредственного управления настройками оборудования. Такой подход был гораздо более гибким, поскольку позволял достичь любого разрешения, глубины цвета и частоты обновления – ограничиваясь лишь объемом памяти, выделенной под фреймбуфер. Нежелательным побочным эффектом этого метода было то, что устройство отображения могло быть перегружено, превышая свои возможности. В некоторых случаях это приводило к повреждению аппаратной части дисплея. Чаще всего это просто приводило к искаженному и бесполезному изображению. Современные ЭЛТ-мониторы решают эту проблему благодаря внедрению защитных схем. При изменении режима отображения монитор пытается установить синхронизацию с новой частотой обновления. Если монитору не удается установить синхронизацию или если сигнал выходит за пределы допустимого диапазона, монитор игнорирует сигнал фреймбуфера и может вывести сообщение об ошибке для пользователя. ЖК-мониторы обычно содержат аналогичные защитные схемы, но по другим причинам. Поскольку ЖК-дисплей должен дискретизировать сигнал отображения (фактически эмулируя электронный луч), любой сигнал, выходящий за пределы диапазона, не может быть физически отображен на мониторе.

Доступ к памяти

Хотя к буферам кадров обычно обращаются посредством отображения памяти непосредственно в пространство памяти ЦП, это не единственный способ доступа к ним. Методы доступа к памяти буферов кадров значительно различались. Некоторые из наиболее распространенных:
Отображение всего буфера кадров в заданный диапазон памяти. Команды портов для установки каждого пикселя, диапазона пикселей или элемента палитры. Отображение диапазона памяти, меньшего, чем объем памяти буфера кадров, с последующим переключением банков при необходимости. Организация буфера кадров может быть с упакованными пикселями или раздельно-канальной. Буфер кадров может быть полностью адресуемым или иметь ограничения на способ его обновления.

ОЗУ на видеокарте

Видеокарты всегда имеют определенный объем памяти. Небольшая часть этой памяти используется для "буферизации" растрового изображения данных для отображения. Поэтому термин "фреймбуфер" часто используется как синоним этой памяти. Центральный процессор отправляет обновления изображения на видеокарту. Видеопроцессор на видеокарте формирует изображение на экране и сохраняет его во фреймбуфере в виде большого растра в памяти. Этот растр в памяти используется видеокартой для непрерывного обновления изображения на экране.

Виртуальные буферы

Многие системы пытаются эмулировать функциональность устройства кадрового буфера, часто из соображений совместимости. Два наиболее распространенных виртуальных кадровых буфера — это устройство кадрового буфера Linux (fbdev) и X Virtual Framebuffer (Xvfb). Xvfb был добавлен в дистрибутив X Window System для обеспечения возможности запуска X без графического кадрового буфера. Устройство кадрового буфера Linux было разработано для абстрагирования физического метода доступа к базовому кадровому буферу в гарантированное отображение памяти, с которым программам легко работать. Это повышает переносимость, поскольку программам не требуется учитывать системы с разрозненными отображениями памяти или требующие переключения банков памяти.

Перевертывание страниц

Буфер кадров может быть спроектирован с достаточным объемом памяти для хранения данных двух кадров видео. В технике, обычно называемой двойной буферизацией или, более конкретно, переключением страниц, буфер кадров использует половину своей памяти для отображения текущего кадра. Пока эта память отображается, другая половина заполняется данными для следующего кадра. Как только вторичный буфер заполнен, буферу кадров дается команда отображать вторичный буфер вместо текущего. Первичный буфер становится вторичным, а вторичный – первичным. Этот переключатель часто выполняется после вертикального интервала обратного хода, чтобы избежать разрыва изображения, когда одновременно отображаются части старого и нового кадров. Переключение страниц стало стандартным приемом, используемым разработчиками компьютерных игр.

Ускорители графики

По мере увеличения спроса на более качественную графику, производители оборудования разработали способ уменьшить время, необходимое процессору для заполнения буфера кадров. Это обычно называют аппаратным ускорением графики. Стандартные команды графического рисования (многие из которых геометрические) отправляются в графический ускоритель в их исходном виде. Ускоритель затем растрирует результаты этих команд в буфер кадров. Этот метод освобождает процессор для выполнения других задач. Первые ускорители были ориентированы на повышение производительности 2D графических интерфейсов пользователя. Сохраняя эти 2D возможности, большинство современных ускорителей сосредоточены на генерации 3D-изображений в реальном времени. Типичная конструкция использует графическую библиотеку, такую как OpenGL или Direct3D, которая взаимодействует с графическим драйвером для преобразования полученных команд в инструкции для графического процессора (GPU) ускорителя. GPU использует эти инструкции для вычисления растрированных результатов, которые затем копируются в буфер кадров. Сигнал буфера кадров формируется в сочетании со встроенными устройствами видеоналожения (обычно используемыми для отображения курсора мыши без изменения данных буфера кадров) и любыми финальными спецэффектами, создаваемыми путем модификации выходного сигнала. Примером таких финальных спецэффектов является техника пространственного сглаживания, использованная в видеокартах 3dfx Voodoo. Эти карты добавляют небольшое размытие к выходному сигналу, что делает ступенчатость растровой графики менее заметной. В свое время существовало множество производителей графических ускорителей, включая: 3dfx Interactive; ATI; Hercules; Trident; Nvidia; Radius; S3 Graphics; SiS и Silicon Graphics. По состоянию на 2015 год рынок графических ускорителей для систем на базе x86 доминируют Nvidia (приобрела 3dfx в 2002 году), AMD (приобрела ATI в 2006 году) и Intel.

Сравнения

С помощью буфера кадров электронному лучу (если технология отображения его использует) дается команда выполнять растровое сканирование, как это делает телевизор при воспроизведении телевизионного сигнала. Цветовая информация для каждой точки, отображаемой на экране, извлекается непосредственно из буфера кадров во время сканирования, формируя набор дискретных элементов изображения, то есть пикселей. Буферы кадров существенно отличаются от векторных дисплеев, которые были распространены до появления растровой графики (и, как следствие, до появления самой концепции буфера кадров). В векторном дисплее хранятся только вершины графических примитивов. Затем электронному лучу выходного дисплея дается команда перемещаться от вершины к вершине, прочерчивая линию между этими точками. Кроме того, буферы кадров отличаются от технологии, используемой в ранних текстовых дисплеях, где буфер хранит коды символов, а не отдельных пикселей. Видеоустройство выполняет такое же растровое сканирование, как и с буфером кадров, но генерирует пиксели каждого символа из буфера по мере направления луча.