Эффекты (Direct3D 11)
Эффект DirectX — это коллекция состояния конвейера, заданная выражениями, написанными на языке HLSL , и синтаксисом, характерным для платформы эффектов.
После компиляции эффекта используйте API платформы эффектов для отрисовки. Функциональные возможности эффектов могут варьироваться от простого шейдера вершин, преобразующего геометрию, и пиксельного шейдера, который выводит сплошной цвет, до метода отрисовки, который требует нескольких проходов, использует каждый этап графического конвейера и управляет состоянием шейдера, а также состоянием конвейера, не связанным с программируемыми шейдерами.
Первым шагом является упорядочение состояния, которым вы хотите управлять в эффекте. К ним относятся состояние шейдера (вершина, корпус, предмет, геометрия, пиксельные и вычислительные шейдеры), состояние текстуры и выборки, используемые шейдерами, а также другие непрограммируемые состояния конвейера. Эффект можно создать в памяти в виде текстовой строки, но обычно размер становится достаточно большим, чтобы его было удобно хранить в файле эффекта (текстовом файле, который заканчивается расширением FX). Чтобы использовать эффект, необходимо скомпилировать его (проверка синтаксис HLSL, а также синтаксис платформы эффектов), инициализировать состояние эффекта с помощью вызовов API и изменить цикл отрисовки для вызова API отрисовки.
Эффект инкапсулирует все состояния отрисовки, необходимые для определенного эффекта, в одну функцию отрисовки, называемую методом. Проход — это набор метода, который содержит состояние отрисовки. Чтобы реализовать эффект отрисовки с несколькими проходами, реализуйте один или несколько проходов в методе. Например, предположим, что вы хотите отрисовать геометрию с одним набором буферов глубины или трафарета, а затем нарисовать поверх них спрайты. Вы можете реализовать отрисовку геометрии в первом проходе, а рисование спрайта — во втором. Для отрисовки эффекта необходимо просто отобразить оба прохода в цикле отрисовки. В эффекте можно реализовать любое количество методов. Конечно, чем больше количество методов, тем больше время компиляции эффекта. Одним из способов использования этой функции является создание эффектов с помощью методов, предназначенных для работы на другом оборудовании. Это позволяет приложению корректно понижать производительность в зависимости от обнаруженных аппаратных возможностей.
Набор методов можно сгруппировать в группу (в которой используется синтаксис "fxgroup"). Методы можно группировать любым способом. Например, можно создать несколько групп, по одной для каждого материала; каждый материал может иметь метод для каждого уровня оборудования; каждый метод будет иметь набор проходов, которые определяют материал на конкретном оборудовании.
В этом разделе
Раздел | Описание |
---|---|
Упорядочение состояния в эффекте |
В Direct3D 11 состояние эффекта для определенных этапов конвейера упорядочено по структурам. |
Интерфейсы системы эффектов |
Система эффектов определяет несколько интерфейсов для управления состоянием эффекта. |
Специализированные интерфейсы |
ID3DX11EffectVariable содержит ряд методов для приведения интерфейса к нужному типу интерфейса. |
Интерфейсы и классы в эффектах |
Существует множество способов использования классов и интерфейсов в эффектах 11. |
Отрисовка эффекта |
Эффект можно использовать для хранения информации или для отрисовки с помощью группы состояний. |
Клонирование эффекта |
Клонирование эффекта создает вторую, почти идентичную копию эффекта. |
Синтаксис потоковой передачи |
Геометрический шейдер с потоковой передачей объявляется с определенным синтаксисом. |
Различия между эффектами 10 и эффектами 11 |
В этом разделе показаны различия между эффектами 10 и эффектами 11. |