Эффекты (Direct3D 9)

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

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

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

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

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

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

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

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

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

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

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

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

Эффекты сохраняют и восстанавливают состояние

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

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

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

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

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

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

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