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;
}
Temas relacionados