М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006) (1124363), страница 60
Текст из файла (страница 60)
Часто нужно отобразить или сохранить только часть изображения, то есть вложенный прямоугольник. Кроме того, Аы должны принять во внимание, что различные компьютеры имеют различный грядок следования байтов. Наконец, аппаратное обеспечение некоторых машин куда более эффективно работает с данными, выровненными по 2-, 4- или 8-байтоюй границе оперативной памяти.
Для таких компьютеров вы, вероятно, пожелаеп управлять выравниванием. За все, что было упомянуто в этом абзаце, отвечают (вжнмы хранения пикселов, обсуждаемые ниже. Вы указываете эти режимы с по- нощью команды к1Р! хе15(оге«(), которую мы пока просили проигнорировать А паре наших примеров. Все поддерживаемые Орепб(. режимы сохранения пикселов управляются команмй к1Р! хе!5(оге«().
Как правило, выполняется несколько последовательных вызовов атой команды с целью установить значения нескольких параметров. ток) к1Р! хе151оге(!()(О(.еппп! рпате, ТУРЕ рагат)! Устанавливает режимы сохранения пикселов применительно к операциям 310ганР!хе1зО, 61кеаПР(хе1з(), к1В!тварО, к1Ро1укоп51!рр1еО, к1Тех1ваке10(), В1Тех1вабе20О, к1Тех1вакеЗР(), к1Тех5оЫваке10О, к1Тех5эЫваке20(), к1Тех5иЫвакеЗРО, к16еттех1вакеО и, если поддержана конвейеризация обработки изображений, также к к16е(СЬ1огТаЫе(), 316е(Сопке!ит(опт!1(егн, В16е!5ерагаЫеР!1(ег(), к16е(Н(этокгав() и к16е!Н(пвах().
Возможные имена параметров (рлате) представлены в табл. 8.4 вместе с типами данных, начальными значениями и допустимыми диапазонами значений. Параметры 6С РМРАСК* управляют тем, как выполняют распаковку данных из памяти функции к10гаиР(хе1э(), к1В(!вар(), к1РЬ1укоп511рр1е(), к11ех1вэке10О, к1Тех1ваке20(), к1Тех1вакеЗОО, к1Тех5иЫваке10О, к11ех5оЫваке20О н к1Тех5оЫваке30(). Параметры 6! РАСК* аналогично отвечают за упаковку в память при выполнении В1кеаПР| хе!э() и к16етТех1ваке О и, если доступна конвейеризация, также для к16е(Со!о гТаЫе (), к16е(сопчо1ит!опР!11егО, к16ет5ерагаыеГ!1тегО, к16етн(зтокгавО и к16е(Н! эвах О. Параметры 6С РМРАСК 1МА6Е НЕ16НТ, 6! РАСК |НА6Е НЕ16НТ, 6С РМРАСК 5К1Р |НА6Е5 и 6С РАСК 5К1Р 1НА6Е5 затрагивают только ЗТ)-текстурирование (к1Тех1ваке30(), к1Тех5иЫвакеЗРО и к16етТех1ваке(6С ТЕХТРКЕ 30, )).
Пескольку соответствующие упаковке и распаковке параметры имеют одинакоАые значения, они обсуждаются далее вместе и упоминаются без префикса 6! АА(кили 61 РМРАСК. Например, '5ИАР ВТТЕ5 подразумевает как 61 РАСК 5ИАР 1(ТЕ5, таки 6С РМРАСК 5ИАР ВТТЕ5. Егли параметр *5ИАР ВТТЕ5 равен РА!5Е (по умолчанию), действует «родной> пя клиента Орепб(.
порядок следования байтов в памяти,и в противном слуцк — обратный. Изменение порядка следования применимо к элементам любого кивера, но имеет смысл только для многобайтовых элементов. 280 Глава 8 ° Вывод пиксепов, битовых образов, шрифтов и изображений Таблица 8.4. Параметры команды 9)Р~хе)51оге1) Значение Допустимый диапазон иницмализации Название параметра Тип 6СЬоо)еап ГА15Е 6СЬоо)еап ГА15Е 61 0МРАСК 5УУАР ВУТЕ5, 61. РАСК 5УУАР ВУТЕ5 61 0МРАСК С58 Г)Я51, 61,РАСК 158 Г1й5Т 66 0МРАСК ВОУУ СЕМОТН, 66 РАСК ПОУУ СЕМВТН 66 0МРАСК 5К1Р ЙОУУ5, 6С РАСК 5К1Р КОУУ5 6С 0МРАСК 5К1Р Р!ХЕС5, 61.
РАСК 5К1Р Р1ХЕЕ5 61 0МРАСК АС16ММЕМТ, 61 РАСК АС16МНЕМТ 61 0МРАСК 1МА6Е НЕ16НТ, 61 РАСК 1ИАОЕ НЕ16НТ 61 0МРАСК 5К1Р 1МА6Е5, 61 РАСК 5К1Р 1МА6Е5 ТВОЕ/ГАЗ.5Е ТВОЕ/ГАС5Е Любое неотрицательное целое число 60пт 60пс Любое неотрицательное целое чнсяо Любое неотрицательное целое число 6 0пс 60пс 1, 2, 4, 8 6 0пс Любое неотрицательное целое число Любое неотрицательное целое ч н ел о 6 0пс Эффект от перестановки байтов может различаться от реализации ОрспСЕ к реализации.
Так, рис. 8.10 иллюстрирует перестановку байтов для различных типов данных в предположении, что в некоторой системе тип С) цЬусе имеет размер 8 бит, С1 цзЬогт — 18 бит и СЬц)пт — 32 бита. Заметьте, что перестановка не влияет па однобайтовые данные. 76543210 765 43210 — и. 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 О 7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8 31 30292827262524232221201918171615141312111098 7 6 5 4 3 2 1 0 7 6 б 4 3 2 1 01514131211109 8232221 20191817163130292827262524 Рис. 8.10. Эффект для перестановки байтов для типов Вуге, 5поп и 1псейег ПРИМЕЧАНИЕ Пока ваше приложение Орепбь работает с изображениями само по себе, не разделяя их с другими машинами, вы можете игнорировать аспект порядка следования байтов.
Но если оно должно воспроизвести изображение ОрепЯ., созданное на другой машине, с иным расположением байтов в слове, параметр *5ууАР ВТТЕ5 в вашем распоряжении. Тем не менее параметр '5ууАР ВУТЕ5 не позволяет переупорядочивать элементы 1например, переставлять местами зеленый и красный). Конвейерная обработка изображений 281 Параметр 'Е5В Р1к5Т применяется только при отображении или чтении одноРазрядных изображений или битовых образов (где одному пикселу соответствует один бит).
Если значение 'ь5В Е1п5Т равно РАс5Е (по умолчанию), биты каждою байта отсчитываются от позиции самого старшего бита; иначе подразумевается противоположный порядок. Например, если *Е5В Р1к5Т равно РАЕ5Е, а интересующий байт — Ох31, биты следуют в последовательности (О, О, 1, 1, О, О, О, 1). Если 'Е5В Р185Т равно ТВОЕ, эта последовательность выглядит так: (1, О, О, О, 1, 1, 0,0), Часто аппаратные средства компьютеров оптимизированы под выровненные а памяти данные. Например, если длина слова в компьютере 32 бита, оборудованае с большей эффективностью будет обращаться к данным, выровненным по 32- )взрядной границе, адреса которых обычно кратны 4. Аналогично, 64-битовые архитектуры могут работать лучше, когда данные выровнены по 8-байтовым границам. На некоторых компьютерах, тем не менее, выравнивание не играет роли.
а>в зр я- и- но ~й- ,Р ый Рис. В.11. Параметры ~5К1Р ЙОМ15, *5К1Р Р1ХЕ(5 и *ПОЧ/ ЬЕНОТН Предположим, что ваша машина лучше справляется с пикселами, выровненными па4-байтовой границе. Изображения хранятся с учетом этого фактора, и каждый Рад начинается с адреса, кратного 4 байтам. Если изображение имеет ширину Иногда нужно отрисовать или прочитать только прямоугольник, являющийся пстью изображения, сохраненного в памяти. В таком случае требуется указать аействительную длину (в пикселах) большего прямоугольника с помощью параиетра *ЯОи 'сейстн.
если значение *РОи еемстн нулевое (по умолчанию), длина рвда приравнивается ширине, указанной в В!РеаоР1ХЕ1а(), к1ОгаиР1ХЕ1а() или 11(оруР1хе1э(). Также требуется задать количество рядов и пикселов в рялу, пропускаемых перед копированием вложенного прямоугольника. Эти числа задаются параметрами *5К1Р ПОИ5 и '5К1Р Р1ХЕЕ5, как показано на рис. 8.11. По уиолчанию оба значения равны О, то есть обработка осуществляется от левого нижнего угла. 282 Глава 8 ° Вывод пикселов, битовых образов, шрифтов и изображений 5 пикселов и для каждого пиксела отводится по байту на компонент (красный, зеленый и синий), то вся строка займет 5 х 3 - 15 байт. Для достижения максимальной эффективности требуется дополнительное выделение еще одного байта под каждую строку.
Если данные выровнены подобным образом, следует задать параметр»ЯЕ16ММЕМТ (4 в нашем случае). Если значение»АЕ16МНЕМТ установлено в 1, задействуется каждый байт. Если оно равно 2, при необходимости пропускается один байт в конце строки для того, чтобы следующая строка начиналась с четного адреса. В случае битовых образов (или одноразрядных изображений) выравнивание производится аналогично, с той разницей, что обрабатываются не байты, а биты, Так, если за пиксел отвечает всего один бит, длина строки равна 75 и выравнивание производится по значению 4, каждая строка требует для себя 75/8, то есть 9 3/8 байта.
Поскольку 12 является наименьшим числом, одновременно кратным 4 и большим числа 9 3/8, каждый ряд будет занимать в памяти 12 байт. Если параметр выравнивания равен 1, будут использоваться 10 байт каждой строки, то есть округленное вверх значение 9 3/8. (Пример применения к1Р)хе151оге1 О см, в листинге 84.) ПРИМЕЧАНИЕ Значение по умолчанию для параметра»Яс16ММЕМТ равно 4. Допущение, что данные изображения плотно упакованы и выровнены по байтовой границе (»Я»16ММЕМТ равно 1) — вес»ив часто встречаемая ошибка.
Параметры *1НА6Е НЕ16НТ и *5К1Р 1НА6Е5 имеют смысл только в отношении трехмерных текстур. (См. раздел <Режимы хранения пикселов для трехмерных текстур» главы 9.) Операции при передаче пикселов Во время передачи данных из памяти в буфер кадров (или наоборот) Орепбс может производить над этими данными некоторые действия. Например, изменяются диапазоны для компонентов — обычно значения красного компонента находятся в интервале от 0 до 1, но вы можете предпочесть для них другой диапазон; илн возьмем случай, когда данные того же красного компонента в разных графи. ческих системах сохраняются в отличных друг от друга диапазонах.
Вы можете создавать карты (пхарз) для выполнения произвольных преобразований над ин. дексом цвета или компонентами цвета. Такие преобразования выполняются во время передачи пикселов в (из) буфер кадров и соответственно называются (р(хе! ггапз(ег орегабовз). Отвечают за такие преобразования команды а1Р)ке1Тгапзтег'() и к1Р1ке1Нар*п.
Хотя буферы цвета, глубины и трафарета имеют много общего, они не ведут себя идентично и в некоторых режимах имеют свою специфику. Мы подробно рассмотрим все режимы, включая их специальные случаи, в этом и следующих разделах. Часть характеристик устанавливается с помощью к1Р)хе1Тгапз1ег*(), а часть— указывается посредством 81Р1хе1Нар*п, обсуждаемой в следующем разделе. Конвейерная обработка изображений 283 чо1с) В\Р1хе\Тгапзтег((()(б(.епигп рпагпе, ТгРЕрагат).
Устанавливает режимы передачи пикселов, воздействующие на выполненне 610ганР1хе1з(), В!КеаОР1хе1з(), В1СоруР1хе!з(), 61Тех1вайе10(), В!Тех1вайе20(), 61тех1ваВе30(), В!Сорутех1вабе10(), 61СоруТех1вабе20(), 61Тех5иЫвайе10(), 61Тех5иЬ1вабе20(), В1Тех5иЫваВе30(), 61Сорутех5иЫвабе10(), к1СоруТех5иЫвабе20(), 61Сорутех5иЫвайе30() и 616етТех1вайе(). Аргумент рпагпе принимает одно из значений, перечисленных в первом столбце табл. 8.5, а значения аргумента рагагп должны быть в допустимом диапазоне, как показано в той же таблице.