Синтаксис объявления функций

Функции HLSL объявляются с помощью следующего синтаксиса.

[StorageClass] [clipplanes()] [точная] имя Return_Value ( [ArgumentList] ) [: Semantic] { [StatementBlock] };

 

Параметры

StorageClass

Модификатор, который переопределяет объявление функции. Inline в настоящее время является единственным значением модификатора. Значение модификатора должно быть встроенным, так как оно также является значением по умолчанию. Таким образом, функция является встроенной независимо от того, указана ли встроенная функция, а все функции в HLSL являются встроенными. Встроенная функция создает копию тела функции (при компиляции) для каждого вызова функции. Это делается для уменьшения затрат на вызов функции.

Клиппланы

Необязательный список плоскостей клипа, который содержит до 6 указанных пользователем плоскостей клипа. Это альтернативный механизм для SV_ClipDistance , который работает на уровне компонентов 9_x и выше.

Имя

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

ArgumentList

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

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

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

StatementBlock

Необязательные операторы, составляющие тело функции. Функция, определенная без тела, называется прототипом функции; Тело прототипа функции должно быть определено в другом месте, прежде чем можно будет вызвать функцию.

Возвращаемое значение

Возвращаемым типом может быть любой из этих типов HLSL.

Комментарии

Синтаксис на этой странице описывает почти все типы функций HLSL, включая вершинные шейдеры, пиксельные шейдеры и вспомогательные функции. Хотя геометрический шейдер также реализуется с помощью функции, его синтаксис немного сложнее, поэтому существует отдельная страница, которая определяет объявление функции шейдера геометрии (см. раздел Объект шейдера Геометрии (DirectX HLSL)).

Функция может быть перегружена при условии, что ей присвоено уникальное сочетание типов параметров и/или порядка параметров. HLSL также реализует ряд встроенных или встроенных функций.

Вы можете указать пользовательские плоскости клипов с помощью атрибута clipplanes . Windows применяет эти обрезные плоскости ко всем нарисованным примитивам. Атрибут clipplanes работает так же , как SV_ClipDistance но работает на всех аппаратных уровнях компонентов 9_x и выше. Дополнительные сведения см. в разделе Плоскости клипа пользователя на оборудовании уровня компонентов 9.

Примеры

Этот пример получен из basicHLSL10.fx из примера BasicHLSL10.

struct VS_OUTPUT
{
    float4 Position   : SV_POSITION; 
    float4 Diffuse    : COLOR0;
    float2 TextureUV  : TEXCOORD0;
};

VS_OUTPUT RenderSceneVS( float4 vPos : POSITION,
                         float3 vNormal : NORMAL,
                         float2 vTexCoord0 : TEXCOORD,
                         uniform int nNumLights,
                         uniform bool bTexture,
                         uniform bool bAnimate )
{
    VS_OUTPUT Output;
    ...
    return Output;    
}

В этом примере из advancedParticles.fx из примера AdvancedParticles показано использование семантики для возвращаемого типа.

//
// PS for particles
//
float4 PSPointSprite(PSSceneIn input) : SV_Target
{   
    return g_txDiffuse.Sample( g_samLinear, input.tex ) * input.color;
}

Функции (DirectX HLSL)