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


Отрисовка эффекта (Direct3D 11)

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

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

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

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

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

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

Эффекты (Direct3D 11)