Sintaxis de declaración de función
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. insertado es actualmente el único valor modificador. El valor del modificador debe ser insertados porque también es el valor predeterminado. Por lo tanto, una función está insertada independientemente de si especifica insertadas 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 nivel de característica 9_x y versiones posteriores.
-
nombre de
-
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 pasado a una función.
-
semántica
-
Cadena opcional que identifica el uso previsto de los datos devueltos (vea Semantics (DirectX HLSL)).
-
StatementBlock de
-
Las 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 de .
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 complicado, por lo que hay una página independiente que define una declaración de función del sombreador de geometría (vea Geometry-Shader Object (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 una serie de funciones intrínsecas integradas o .
Puede especificar planos de clip específicos del usuario con los planos de clip atributo. Windows aplica estos planos de clip a todos los primitivos dibujados. Los planos clip funcionan como SV_ClipDistance, pero funcionan en todos los nivel de características de hardware 9_x y versiones posteriores. Para obtener más información, consulta planos de clip de usuario en el nivel de característica 9 hardware.
Ejemplos
Este ejemplo procede de BasicHLSL10.fx de la 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 de 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