Тип структуры
Используйте следующий синтаксис для объявления структуры с помощью HLSL.
struct Name{ [InterpolationModifier] Type[RxC] MemberName; ... };
Параметры
-
Имя
-
Строка ASCII, однозначно идентифицирующая имя структуры.
-
[ИнтерполяцияМодификатор]
-
Необязательный модификатор, указывающий тип интерполяции. Подробные сведения см. в разделе Примечания.
-
Тип[RxC]
-
Тип-член с необязательным размером массива row (R) x column (C). Структура содержит по крайней мере один элемент; Если он содержит несколько элементов, все элементы имеют один и тот же тип. Число строк и столбцов является целыми числами без знака от 1 до 4 включительно.
-
Membername
-
Строка ASCII, однозначно идентифицирующая имя члена.
Комментарии
Модификатор интерполяции можно указать в любом элементе структуры или в аргументе функции пиксельного шейдера. Если модификатор отображается в обоих местах, внешний модификатор (модификатор аргумента пиксельного шейдера) отменяет внутренний модификатор (модификатор структуры).
При компиляции шейдера или эффекта компилятор шейдера упаковывает элементы структуры в соответствии с правилами упаковки HLSL.
Модификаторы интерполяции, представленные в модели шейдера 4
Выходные данные вершинного шейдера, используемые для входных данных пиксельного шейдера, линейно интерполируются для получения значений по пикселям во время растеризации. Чтобы задать метод интерполяции, используйте любое из следующих значений, которые поддерживаются в модели шейдера 4 или более поздней версии. Модификатор игнорируется на всех выходных данных вершинного шейдера, который не используется в качестве входных данных пиксельного шейдера.
Модификатор интерполяции | Описание |
---|---|
Линейные | Интерполяция входных данных шейдера; linear является значением по умолчанию, если не указан модификатор интерполяции. |
Центроид | Интерполяция между образцами, которые находятся где-то в пределах покрытой области пикселя (для этого может потребоваться экстраполирование конечных точек из центра пикселя). Центроидная выборка может улучшить сглаживание, если пиксель частично покрыт (даже если центр пикселей не покрыт). Модификатор центроидов должен сочетаться с линейным модификатором или модификатором noperspective . |
nointerpolation | Не интерполяйте . |
noperspective | Не выполняйте коррекцию перспективы во время интерполяции. Модификатор noperspective можно сочетать с модификатором центроида. |
Образец |
Доступно в модели шейдеров версии 4.1 и более поздних версий Интерполяция в расположении выборки, а не в центре пикселя. Это приводит к тому, что шейдер пикселей выполняется для каждой выборки, а не для пикселя. Другой способ вызвать выполнение для каждого примера — получить входные данные с семантической SV_SampleIndex, которая указывает на текущий выборку. Только входные данные с указанным образцом (или входные SV_SampleIndex) отличаются между вызовами шейдеров в пикселях, в то время как другие входные данные, не указывающие модификаторы (например, если модификаторы смешиваются на разных входных данных), по-прежнему интерполируются в центре пикселя. Вызов пиксельного шейдера, а также проверка глубины и набора элементов выполняется для каждого охваченного образца в пикселе. Иногда это называется суперсамплингом. В отличие от этого, при отсутствии вызова частоты выборки, известного как мультисамплинг, шейдер пикселей вызывается один раз на пиксель независимо от того, сколько выборок охвачено, в то время как проверка глубины и набора элементов выполняется с частотой выборки. Оба режима обеспечивают эквивалентное сглаживание границ. Однако функция supersampling обеспечивает лучшее качество заливки за счет более частого вызова шейдера пикселей. |
- 1. При использовании типа int/uint единственным допустимым параметром является **nointerpolation**.
Модификаторы интерполяции можно применять к членам структуры, аргументам функции или к обоим.
Примеры
Ниже приведены некоторые примеры объявлений структуры.
struct struct1
{
int a;
}
Это объявление включает массив .
struct struct2
{
int a;
float b;
int4x4 iMatrix;
}
Это объявление включает модификатор интерполяции.
struct In
{
centroid float2 Texcoord;
};