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


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

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

[StorageClass] [клиппланы()] [точный] Return_Value имя ( [ArgumentList] [ Семантические] { [StatementBlock] };

 

Параметры

StorageClass

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

Клиппланы

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

имя

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

ArgumentList

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

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

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

StatementBlock

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

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

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

Замечания

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

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

Вы можете указать плоскости клипов для конкретного пользователя с помощью атрибута клиппланов. Windows применяет эти плоскости клипа ко всем примитивам, нарисованным. Атрибут работает как 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)