OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 69
Текст из файла (страница 69)
При вызове В1о 5са1е1маде О нужно выделить достаточное простран- ство для выходного буфера. Функция возвращает 0 при успехе и код ошибки 61.() прн неудаче. ТЕ, )Е ту(ы. ПРИМЕЧАНИЕ В 6СО 1.3 команда дшдсв(е1гпаде() поддерживает форматы упакованных пикселов (и связанные с ними мпы данных). из- пот де- пе- то(с( В1Сорутех1яаде20(О(.епшп такает, ОЫп( !еое1, ОЫпг ттегла(рогтат, 6(лпс х, О(лпг у, О1.юге( АЛЫЙ, ОЫле( Ье(дбг, О(лпс Ьогс(ег); Создает двухмерную текстуру, выбирая данные из буфера кадров для определенна текселов.
Пикселы читаются из текущего буфера 6С ЯЕА0 ВОРРЕЯ и обрабатываются так, как это делает команда В1СоруР! хе1в (), но вместо поступления в буфер кадров пикселы помещаются в память текстуры. Здесь применимы настройки В1Р(хе1ТгапзТег«О и других операций при передаче пикселов. Аргумент (ашес должен быть одной из констант; 6Е ТЕХТОВЕ 20, 6( ТЕХТОВЕ СОВЕ ИАР Р051Т1ЧЕ Х, 6( ТЕХТОЯЕ СОВЕ ИАР ИЕ6АТ1ЧЕ Х, 61 ТЕХТОЯЕ СОВЕ ВАР Р051Т1ЧЕ У, 6С ТЕХТОЯЕ СОВЕ ИАР ИЕ6АТ1ЧЕ У, 6( ТЕХТОЯЕ СОВЕ ИАР Р051Т1ЧЕ 2 или 6( ТЕХТОЯЕ СОВЕ ИАР ИЕ6АТ1ЧЕ 2. (См. раздел ««Кубические« текстуры» для справки об использовании констант "СОВЕ ВАР*.) Аргументы !епе1, (птегпа!Рогглаг и Ьогг(ег задаются так же, как и лля В1Тех1юаде20 () .
Массив текстуры выбирается из выровненного относительно экрана прямоугольника пикселов с координатами левого нижнего угла, равными значению аргументов х и у. Ширина (плй6) н высота (Ье(ВЬ() задают размеры прямоупщьника пикселов, Оба этих аргумента должны удовлетворять выражению 2т + 26, где т — неотрицательное целое (оно может быть различным для плй6 н Ье(КЬг), а Ь вЂ” значение аргумента Ьогс(ег. ько исует ~ми ~ ее ме- де- ре- пу~ри 1 и об- бу- уи Следующие разделы более подробно описывают текстурирование, включая использование аргументов приемника ((агбег), границы (Ьоп!ег) и уровня детализаллн ((еое!).
Аргумент гагдег может быть использован для запроса точного размера пкстуры (командой В1Тех1маде«0О создается текстура-посредник) с целью выяснять, допустима лн такая текстура с точки зрения вьщеляемых реализацией ОР«пС(. ресурсов. Переопределение части текстуры описано в разделе «Замещение изображения текстуры или его части». Одномерные и трехмерные текстуры вЕсуждаются в разделах «Одномерныс текстуры» и «Трехмерные текстуры». Грашцам текстур, которыми можно управлять с помощью параметра Ьогс(ег, уделено ллимание в разделе «Сжатые изображения текстур».
Аргумент !епе! используется Ллл задания текстур с различным разрешением, соединяемых воедино специальюй техникой М!Р-отображения (ппршарршд), которой посвящен раздел «М1Р- вгображение: детализация на множестве уровней». Использование М1Р-отобралвлнй требует также понимания особенностей применения к ним техники (~лльтрации, которая рассматривается в одноименном разделе. ,не но- рия шп оЫ лов з!тн пи ру пи ва- Сам буфер кадров может также выступать в роли источника данных для тексту- Ры. Команда В1Сорутех1яаде20О читает прямоугольник пикселов из буфера ьздров и использует этот прямоугольник как текселы новой текстуры.
322 Глава 9 ° Наложение текстур Текстуры-посредники Для ОрепСЕ-программиста, использующего текстуры, критичными являются нх размеры. Ресурсы для текстур обычно ограничены, а ограничения на форматы текстур рознятся от реализации к реализации. Поэтому предусмотрены специальные текстуры-посредники (Гех(цге ргоху), ориентированные на оценку возможностей конкретной реализации ОрепСЕ в отношении определенных формата и размеров текстуры.
Команда В16ег1пгекегч(6( ИАХ ТЕХТОРЕ 512Е,...) выдает нижний предел наибольших доступных ширины и высоты (без границ) изображения текстуры; обычно это размеры наибольшей квадратной текстуры. Для трехмерных текстур с аналогичной целью можно использовать параметр бь ИАХ 30 ТЕХТОРЕ 512Е; в этом случае, помимо ширины и высоты, возврагцается предельная глубина трехмерного изображения текстуры.
Для кубических (спЬе шар) текстур имеется аналогичный параметр 6С ИАХ СОВЕ МАР ТЕХТОРЕ 512Е, Вместе с тем одни только запросы 6С МАХ*ТЕХТОРЕ 512Е не учитывают влияние внутреннего формата и другие факторы. Изображение текстуры, текселы которого хранятся в формате 6С Р6ВА16 — 64 бита/тексел, по площади в 16 раз меньше изображения, хранимого в формате 6С СОИ1МАМСЕ4.
Текстуры с границами или М1Р-картами предъявляют еше большие требования к памяти, Специальный «местозаполнитель», иначе посредник (ргоху), изображения текстуры позволяет программе узнать более точно, в состоянии ли ОрепСЕ разместить текстуру с желаемым внутренним форматом. Например, чтобы выяснить, достаточно ли ресурсов для размешения стандартной 21)-текстуры, вызовите и1Тех1ваке20() со значением аргумента Гагдей рав.
ным 6( РРОХТ ТЕХТОРЕ 20, с заданными уровнем детализации, внутренним форматом, шириной, высотой, границами, форматом и типом. Для случая текстур- посредников вам следует передать МОЕ( в аргументе (ехе(к (Для кубических карт используйте и1Тех1ваие20() со значением Гагпее, равным 6( РРОХУ ТЕХТОРЕ СОВЕ ИАР. Для одномерных и трехмерных текстур используйте соответствующие подпрограммы и символические константы,) После того как текстура-посредник создана, ее параметры состояния запрашивеются командой и16е (Тех Сече1 Ра гане те г» (), Если ресурсов недостаточно, параметры состояния для ширины, высоты, толщины границ и размерности сбрасываются в О. чоЫ и16е(Тех Сече1Ра гане сег(1()ч(С1епшп Гагдед СЕИП 1епе(, СЕевив рпате, ТУРЕ 'рагатз); Возвращает массив значений параметров (рагатз) текстуры для указанного уровня детализации (1епе(). Аргумент (агапе( определяет целевую текстуру как 6С ТЕХТОРЕ 10, 6( ТЕХТОРЕ 20, 6( ТЕХТОРЕ 30, 6( ТЕХТОРЕ СОВЕ ИАР РО51Т1ЧЕ Х, 6( ТЕХТОРЕ СОВЕ ИАР МЕ6АТ1ЧЕ Х, бь ТЕХТОРЕ СОВЕ ИАР Р051Т1ЧЕ Т, 6С ТЕХТОРЕ СОВЕ МАР МЕОАТ1ЧЕ У, 6( ТЕХТОРЕ СОВЕ ИАР РО51Т1ЧЕ 2, 6С ТЕХТОРЕ СОВЕ МАР МЕОАТ1ЧЕ 2, 6С РРОХТ ТЕХТОРЕ 10, 6( РРОХЧ ТЕХТОРЕ 20, 6С РРОХ1' ТЕХТОРЕ 30 или бь РРОХЧ ТЕХТОРЕ СОВЕ МАР.
Описание текстуры 323 ~тся нх )рматы спецпту воз- ормата |лняние которо- меньше (МИ ИЛВ ПРИМЕЧАНИЕ Для текстур-посредников есть одно главное ограничение: они дают ответ на вопрос, можно ли Размес~ить структуру в оперативной памяти, но без скидки на требования других текстур.
Позтону, если текстура-посредник отвечает утвердительно, зто не значит, что текстура может быть резидентной (то есть готова стать частью высокопроизводительного рабочего набора текоур). То есть текстура-посредник не дает ответа на вопрос, хватит ли ресурсов для манипулиРования целевой текстурой. (См. раздел «Объекты текстур» для получения большей информации относительно управления резидентными текпурами). )ня тек размее :рашн но, пар )расы в С1.епп предел ютуры; гекстур ! 512Е; са трехсся ана- гандарт йей рав нм фо тексту ких кар ЕХТОРЕ вуюшн азанно :туру к )ВЕ МА )ВЕ МА )ВЕ МА 10, 6 ;ОВЕ МА (Значение 6С ТЕХТОРЕ СОВЕ МАР недействительно, поскольку нельзя указать определенную поверхность чкубической» карты.) Допустимые значения для рвоте — зто 6С ТЕХТОРЕ М10ТН, 6С ТЕХТОРЕ НЕ16НТ, 6С ТЕХТОРЕ ОЕРТН, 6С ТЕХТОРЕ ВОРОЕР, 6С ТЕХТОКЕ 1МТЕРМАС ГОРМАТ, 6С ТЕХТОРЕ РЕО 512Е, 6С ТЕХТОРЕ 6РЕЕМ 512Е, 6С ТЕХТОРЕ ВСОЕ 512Е, 61 ТЕХТОРЕ АСРНА 512Е, 61 ТЕХТОРЕ СОМ1МАМСЕ 512Еи 6С ТЕХТОРЕ 1МТЕМ51ТУ 512Е.
Листинг 9.2 демонстрирует использование текстурьс-посредника для случая тек- стуры с размерами 64 х 64 тексела и РСВА-компонентами 8-битовой размерно- стн. При успехе команда 616еттехСече1Рэгаветег)ч() сохраняет значение внутреннего формата (в нашем случае 6с Р6ВАВ) в переменной. Листинг 9.2. Использование текпуры-посредника сс(пс н1'осп; 1(тех1ваке20(6С РРОХУ ТЕХТОРЕ 20, О, 6С РОВАВ, 64, 64, О, 6С Р6ВА, 6С ОМ516МЕО ВУТЕ, МОСС); 116«СТехСече1РагаееСег1ч(6С РРОХУ ТЕХТОРЕ 20, В, 6С ТЕХТОРЕ Н1ОТН, ан(ОСП); 3аиещение изображения текстуры или его части Создание текстуры может быть в отношении расходования вычислительных кощностей более затратно, нежели модификация существующей.
Часто лучше ззиенить часть изображения текстуры или его полностью новой информацией, ми создавать ее заново. Это бывает полезно для определенного типа приложеанй, таких как приложения реального времени, которые захватывают видеоизобРюкения как изображения текстур. Для таких приложений имеет смысл создать о(явственную текстуру и обращаться к команде В1Тех5ОЬ|вабе20() для многократного замещения данных текстуры из новых видеоизображений. Также те огРаничения, которые вынуждают делать размеры изображения равными степени войки, не принципиальны для 61Тех5ОЬ1мабе20().