□ масштабирование пиксела;

□ масштабирование и смещение;

□ поиск в таблице цветов;

□ искривление;

□ обработку матрицы линейного преобразования.

Фрагментный процессор не заменяет стандартные графические операции, выполняемые в конце обработки пикселов, - покрытие, проверка на видимость, отсечение по прямоугольнику, наложение шаблона, проверка прозрачности, проверка глубины, отсечение по шаблону, наложение смешиваемых цветов, логические операции, сглаживание, определение видимости плоскостей.

На рис. 2.3 показаны входные и выходные значения фрагментного процессора.

Входные и выходные данные фрагментного процессора

Рис. 2.3. Входные и выходные данные фрагментного процессора Первичными входными данными для фрагментного процессора являются интерполированные в результате растеризации varying-переменные - как встроенные, так и определенные разработчиком. Определенные разработчиком varying-переменные должны быть определены внутри фрагментного шейдера, и их типы должны совпадать с типами, определенными в вершинном шейдере. Значения, вычисляемые стандартной функциональностью между вершинным и фрагмент-ным процессорами, доступны посредством специальных входных переменных.

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

Состояния OpenGL доступны фрагментному шейдеру через встроенные uniform-переменные - так же, как и вершинному шейдеру. Фактически все состояния OpenGL, передающиеся через встроенные unjfovrn-иеременыые, доступны и вершинному, и фрагментному шейдерам. Именно поэтому возможно реализовать стандартные операции над вершинами, например выбор освещения, во фрагмент-ном шейдере, используя стандартные OpenGL-операции управления состоянием.

Приложение может использовать определенные разработчиком uniform-переменные для передачи произвольных, нечасто меняющихся данных фрагментному шейдеру. Одна и та же uniform-переменная может быть использована как вершинным, так и фрагментным шейдером, если она объявлена в обоих как один и тот же тип данных.

Одно из наибольших преимуществ фрагментного процессора заключается в том, что он имеет доступ к текстурной памяти в любое время и может сочетать значения, прочитанные различными способами. Фрагментный шейдер может читать много значений из одной текстуры или много значений из нескольких текстур. Результат одного чтения текстуры может быть использован для другого чтения (это так называемое зависимое чтение текстуры). Ограничений па размер вложенности таких зависимых чтений не существует. Фрагментный шейдер может также реализовывать алгоритмы прохождения лучей.

Параметры OpenGL для текстурных карт определяют поведение операций фильтрации, создания границ, сглаживания и режимов сравнения текстур. Эти операции выполняются при получении доступа к текстуре из шейдера. Шейдер может использовать окончательный результат, а также читать несколько значений из текстуры и выполнять произвольные операции фильтрации. Текстуру можно использовать также для выполнения операций с таблицей преобразования.


⇐ вернуться назад | | далее ⇒