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


Аргументы функции

Функция принимает один или несколько входных аргументов; Используйте следующий синтаксис для объявления каждого аргумента.

[InputModifier] Имя типа [: Semantic] [ИнтерполяцияМодификатор] [= Инициализаторы]

[Модификатор] Имя типа [: Semantic] [: модификатор интерполяции] [= инициализаторы)]

При наличии нескольких аргументов функции они разделяются запятыми.

Параметры

Элемент Описание
InputModifier
Необязательный термин, определяющий аргумент как входные данные, выходные данные или и то, и другое.
Значение Описание
В поле Только входные данные
Inout Входные и выходные данные
out Только выходные данные
Однородный элемент Ввод только константных данных

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

Однородное значение поступает из регистра константы; Каждый вызов вершинного шейдера или шейдера пикселей видит одно и то же начальное значение для однородной переменной. Глобальные переменные обрабатываются так, как если бы они объявлялись однородными. Для функций, не относящихся к верхнему уровню, унифицированный является синонимом in. Если использование параметра не указано, предполагается, что используется параметр .

Тип

Тип аргумента; может быть любым допустимым типом HLSL.

Имя

Строка ASCII, однозначно идентифицирующая имя функции шейдера.

Семантические

Необязательная строка, определяющая предполагаемое использование данных (см. раздел Семантика (DirectX HLSL)).

ИнтерполяцияМодификатор

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

Инициализаторы

Необязательные значения для инициализации; Для инициализации многокомпонентных типов данных требуется несколько значений.

Комментарии

Аргументы функции перечислены в списке аргументов, разделенных запятыми, в объявлении функции. Как и в функциях C, каждый аргумент должен иметь имя параметра и объявленный тип; Аргумент функции HLSL при необходимости может включать семантику, начальное значение, а входные данные шейдера пикселей могут включать тип интерполяции.

Тип аргумента функции может быть структурой, которая может включать модификатор интерполяции для каждого члена. Если аргумент функции также имеет модификатор интерполяции, модификатор аргумента функции переопределяет модификаторы интерполяции, объявленные в type.

Примеры

В этом примере (из примера 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)