Аргументы функций
Функция принимает один или несколько входных аргументов; используйте следующий синтаксис для объявления каждого аргумента.
[InputModifier] Имя типа [: семантика] [ИнтерполяцияModifier] [= инициализаторы] |
---|
[Модификатор] Имя типа [: семантика] [: модификатор интерполяции] [= инициализаторы)]
Если есть несколько аргументов функции, они разделены запятыми.
Пункт | Описание | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
InputModifier |
Необязательный термин, определяющий аргумент как входные данные, выходные данные или оба.
Параметры всегда передаются по значению. значение параметра должно быть скопировано из вызывающего приложения до начала функции. out указывает, что последнее значение параметра должно быть скопировано и возвращено вызывающему приложению при возврате функции. inout — это сокращенное значение для указания обоих. Однородное значение исходит из постоянного регистра; каждое вызов шейдера вершин или шейдера пикселей видит одно и то же начальное значение для единой переменной. Глобальные переменные обрабатываются как если бы они объявлялись однородными. Для функций, отличных от верхнего уровня, однородная является синонимом в. Если использование параметра не задано, предполагается, что использование параметра в. |
||||||||||
типа |
Тип аргумента; может быть любым допустимым типом HLSL. |
||||||||||
имя |
Строка ASCII, которая однозначно определяет имя функции шейдера. |
||||||||||
семантические |
Необязательная строка, идентифицирующая предполагаемое использование данных (см. семантики (DirectX HLSL). |
||||||||||
ИнтерполяцияModifier |
Необязательный модификатор интерполяции, который позволяет шейдеру определить метод интерполяции. Модификатор интерполяции для аргумента функции применяется только к аргументу, используемому в качестве входных данных функции шейдера пикселей. |
||||||||||
инициализаторы |
Необязательные значения для инициализации; Для инициализации типов данных с несколькими компонентами требуется несколько значений. |
Аргументы функции перечислены в списке аргументов, разделенных запятыми, в объявлении функции. Как и в функциях C, каждый аргумент должен иметь имя параметра и объявленный тип; Аргумент функции HLSL может включать семантику, начальное значение и входные данные шейдера пикселей могут включать тип интерполяции.
тип аргумента функции может быть структурой, которая может включать модификатор интерполяции для каждого члена. Если аргумент функции также имеет модификатор интерполяции, модификатор аргумента функции переопределяет модификаторы интерполяции, объявленные в типе.
В этом примере (в примере BasicHLSL10) показаны универсальные и неоднородные входные данные в функцию шейдера вершин.
VS_OUTPUT RenderSceneVS(
float4 vPos : POSITION,
float3 vNormal : NORMAL,
float2 vTexCoord0 : TEXCOORD,
uniform int nNumLights,
uniform bool bTexture,
uniform bool bAnimate )
{
...
}
В этом примере (из примера ContentStreaming) используется входная структура для передачи аргументов функции шейдера пикселей.
VSBasicIn input
struct VSBasicIn
{
float4 Pos : POSITION;
float3 Norm : NORMAL;
float2 Tex : TEXCOORD0;
};
PSBasicIn VSBasic(VSBasicIn input)
{
...
}
-
функции (DirectX HLSL)