Поделиться через


Эффекты (Direct3D 11)

Эффект DirectX — это коллекция состояния конвейера, заданная выражениями, написанными в HLSL, и некоторые синтаксисы, относящиеся к платформе эффектов.

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

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

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

Набор методов можно сгруппировать в группу (которая использует синтаксис fxgroup). Методы можно сгруппировать в любом случае. Например, можно создать несколько групп, по одному на материал; каждый материал может иметь метод для каждого уровня оборудования; каждый метод будет иметь набор проходов, определяющих материал на определенном оборудовании.

В этом разделе

Тема Описание
упорядочение состояния в эффекте
При использовании Direct3D 11 состояние эффекта для определенных этапов конвейера организовано структурами.
системные интерфейсы эффектов
Система эффектов определяет несколько интерфейсов для управления состоянием эффекта.
специализированные интерфейсы
ID3DX11EffectVariable имеет ряд методов приведения интерфейса к конкретному типу интерфейса.
интерфейсы и классы в эффектах
Существует множество способов использования классов и интерфейсов в Effects 11.
отрисовка эффекта
Эффект можно использовать для хранения информации или отрисовки с помощью группы состояний.
клонирование эффекта
Клонирование эффекта создает вторую, почти идентичную копию эффекта.
синтаксис потоковой передачи
Геометрическая шейдера с потоком объявляется с определенным синтаксисом.
различия между эффектами 10 и эффектами 11
В этом разделе показаны различия между эффектами 10 и эффектами 11.

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