Sintaxis de declaración de funciones

Las funciones HLSL se declaran con la sintaxis siguiente.

[StorageClass] [clipplanes()] [precisa] Return_Value Name ( [ArgumentList] ) [: Semantic] { [StatementBlock] };

 

Parámetros

StorageClass

Modificador que vuelve a definir una declaración de función. inline es actualmente el único valor modificador. El valor modificador debe estar insertado porque también es el valor predeterminado. Por lo tanto, una función está alineada independientemente de si se especifica en línea y todas las funciones de HLSL están insertadas. Una función insertada genera una copia del cuerpo de la función (al compilar) para cada llamada de función. Esto se hace para reducir la sobrecarga de llamar a la función.

Portapapeles

Lista opcional de planos de clip, que es de hasta 6 planos de clip especificados por el usuario. Se trata de un mecanismo alternativo para SV_ClipDistance que funciona en el nivel de característica 9_x y versiones posteriores.

Nombre

Cadena ASCII que identifica de forma única el nombre de la función de sombreador.

ArgumentList

Lista de argumentos opcional, que es una lista separada por comas de argumentos pasados a una función.

Semántica

Cadena opcional que identifica el uso previsto de los datos devueltos (vea Semántica (DirectX HLSL)).

StatementBlock

Instrucciones opcionales que componen el cuerpo de la función. Una función definida sin un cuerpo se denomina prototipo de función; el cuerpo de una función de prototipo debe definirse en otro lugar para poder llamar a la función.

Valor devuelto

El tipo de valor devuelto puede ser cualquiera de estos tipos HLSL.

Observaciones

La sintaxis de esta página describe casi todos los tipos de función HLSL, esto incluye sombreadores de vértices, sombreadores de píxeles y funciones auxiliares. Aunque un sombreador de geometría también se implementa con una función, su sintaxis es un poco más complicada, por lo que hay una página independiente que define una declaración de función de sombreador de geometría (vea Objeto geometry-Shader (DirectX HLSL)).

Una función se puede sobrecargar siempre que se le dé una combinación única de tipos de parámetros o orden de parámetros. HLSL también implementa varias funciones integradas o intrínsecas.

Puede especificar planos de clip específicos del usuario con el atributo clipplanes . Windows aplica estos planos de clip a todos los primitivos dibujados. El atributo clipplanes funciona como SV_ClipDistance , pero funciona en todos los niveles de características de hardware 9_x y versiones posteriores. Para obtener más información, consulta Planos de clip de usuario en hardware de nivel de característica 9.

Ejemplos

Este ejemplo procede de BasicHLSL10.fx del ejemplo 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;    
}

En este ejemplo de AdvancedParticles.fx del ejemplo AdvancedParticles, se muestra el uso de una semántica para el tipo de valor devuelto.

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

Funciones (DirectX HLSL)