Эффекты (Direct3D 9)

Эффект Microsoft DirectX позволяет интегрировать вершинные и пиксельные шейдеры с состоянием конвейера для отрисовки объектов. Эффекты — это следующий логический шаг в объединении шейдеров для создания уникальных условий отрисовки.

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

Эффект может заменить обработку вершин и часть обработки пикселей, выполняемую графическим конвейером. Пример эффекта, использующего вершинный шейдер и пиксельный шейдер, приведен в примере BasicHLSL. Вы можете получить этот пример и узнать о нем из пакета SDK для DirectX. Сведения о пакете SDK для DirectX см. в разделе Где находится пакет SDK DirectX?.

Дополнительные сведения о эффектах см. в следующих разделах:

Эффекты и трехмерный конвейер

На следующей схеме показан конвейер.

Схема трехмерного конвейера

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

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

Эффекты могут сохранять и восстанавливать состояние, оставляя устройство в том же состоянии, что и до запуска эффекта. К типам состояний, которыми может управлять эффект, относятся:

  • Состояние шейдера. Сюда входит создание и удаление шейдеров, настройка констант шейдера, настройка состояния шейдера и отрисовка с помощью шейдеров.
  • Состояние текстуры и выборки. Сюда входит указание файлов текстур, инициализация этапов текстуры, создание объектов выборки и настройка состояния выборки.
  • Другое состояние конвейера. Сюда входят состояния для настройки преобразований, освещения, материалов и параметров отрисовки. Это могут быть глобальные или локальные переменные. Переменные могут быть заданы либо самим эффектом, либо приложением.

Эффекты содержат несколько параметров отрисовки, называемых методами. Каждый метод инкапсулирует глобальные переменные, состояние конвейера, состояние текстуры и выборки, а также состояние шейдера. Один стиль реализуется в проходе отрисовки. Один или несколько проходов могут быть инкапсулированы в методе. Все проходы и методы можно проверить, будет ли код эффекта выполняться на аппаратном устройстве.

Состояние сохранения и восстановления эффектов

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

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

При программировании последовательностей отрисовки с несколькими проходами, для каждой из которых требуется собственная настройка состояния, эффекты могут снизить уровень обслуживания, необходимый для отслеживания изменений состояния. Дополнительные сведения о состояниях, которые можно сохранить и восстановить с помощью эффектов, см. в статье Состояния эффектов (Direct3D 9).

Эффекты могут совместно использовать параметры

Параметры эффекта — это все нестатические переменные, объявленные в эффекте. Сюда могут входить глобальные переменные и заметки. Параметры эффекта можно совместно использовать для разных эффектов, объявляя параметры совместно с общим ключевое слово, а затем создавая эффект с помощью пула эффектов.

Клонированные эффекты используют тот же пул эффектов, что и эффект, из которого они клонируются. Клонирование эффекта создает точную копию эффекта, включая глобальные переменные, методы, проходы и заметки.

Руководство по программированию для Direct3D 9