Рис. 21.2. Назначение видеобуфера Размер ячейки зависит от видеорежима. В режиме ТгиеСоЬг ячейка состоит из трех байт. Младший байт содержит код синего, а старший - код красного цвета. В режимах HeightColor ячейка состоит из двух байтов. Распределение бит по кодам цвета в этих режимах может быть 5-5-5 или 5-6-5. В первом случае каждый цвет кодируется пятью битами, при этом младшие разряды кодируют синий цвет. Во втором варианте зеленый цвет кодируется шестью разрядами. Но существуют и другие варианты.
Предварительные сведения
В графических библиотеках предусмотрена возможность выбора используемого формата пиксела. В DirectX объявлено множество констант определения формата. Например, константа D3DFMTX1R5G5B5 определяет формат, в котором кодам цвета выделяется по 5 разрядов, а старший бит слова не используется, а при помощи константы D3DFMTA8R8G8B8 разработчик может указать, что в формате пиксела кроме трех байт цвета предусмотрен байт, задающий прозрачность. Константу D3DFMTJJNKN0WN применяют, когда приложение не задает формат принудительно, а использует режим, установленный пользователем компьютера.
При необходимости узнать установленный формат пиксела можно запросить битовые маски, в которых единицами отмечены разряды, выделенные для кодирования заданного цвета.
Если цвет пиксела кодируется восемью битами, то содержимое байта не подается непосредственно на входы цифроаналоговых преобразователей (ЦАП). Адаптер содержит 256 18-разрядных регистров палитры (6 бит на цветовой компонент), код цвета задает номер регистра палитры, а уже выходы регистра палитры подаются на ЦАП. Это позволяет задавать 218 различных цветов, из которых только 256 можно показать на экране одновременно.
Предположим, что на экране отображается RY = 480 строк растра, а за время движения луча по строке из буфера читается RX = 640 ячеек. Тогда кадр изображения в представленном на рис. 21.2 видеобуфере можно рассматривать как матрицу размером 640 х 480, ячейки которой хранят образ экрана. Это так называемая растровая форма представления изображения.