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


Эффекты (Direct3D 11)

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

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

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

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

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

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

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

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