Syntaxe de la déclaration des fonctions

Les fonctions HLSL sont déclarées avec la syntaxe suivante.

[StorageClass] [clipplanes()] [précis] Return_Value Name ( [ArgumentList] ) [: Semantic] { [StatementBlock] };

 

Paramètres

StorageClass

Modificateur qui redéfinit une déclaration de fonction. inline est actuellement la seule valeur modificateur. La valeur du modificateur doit être inline , car il s’agit également de la valeur par défaut. Par conséquent, une fonction est inline, que vous spécifiiez inline ou non, et toutes les fonctions de HLSL sont inline. Une fonction inline génère une copie du corps de la fonction (lors de la compilation) pour chaque appel de fonction. Cela permet de réduire la surcharge liée à l’appel de la fonction.

Clipplans

Liste facultative des plans d’clip, qui est jusqu’à 6 plans d’clip spécifiés par l’utilisateur. Il s’agit d’un autre mécanisme pour SV_ClipDistance qui fonctionne au niveau des caractéristiques 9_x et plus.

Nom

Chaîne ASCII qui identifie de manière unique le nom de la fonction de nuanceur.

ArgumentList

Liste d’arguments facultative, qui est une liste d’arguments séparés par des virgules passées à une fonction.

Sémantique

Chaîne facultative qui identifie l’utilisation prévue des données de retour (consultez Sémantique (DirectX HLSL)).

StatementBlock

Instructions facultatives qui composent le corps de la fonction. Une fonction définie sans corps est appelée prototype de fonction ; le corps d’une fonction prototype doit être défini ailleurs avant que la fonction puisse être appelée.

Valeur renvoyée

Le type de retour peut être l’un de ces types HLSL.

Notes

La syntaxe de cette page décrit presque tous les types de fonction HLSL, notamment les nuanceurs de vertex, les nuanceurs de pixels et les fonctions d’assistance. Bien qu’un nuanceur de géométrie soit également implémenté avec une fonction, sa syntaxe est un peu plus compliquée, il existe donc une page distincte qui définit une déclaration de fonction de nuanceur geometry (voir Geometry-Shader Object (DirectX HLSL)).

Une fonction peut être surchargée tant qu’elle reçoit une combinaison unique de types de paramètres et/ou d’ordre de paramètres. HLSL implémente également un certain nombre de fonctions intégrées ou intrinsèques.

Vous pouvez spécifier des plans de clip spécifiques à l’utilisateur avec l’attribut clipplanes . Windows applique ces plans clip à toutes les primitives dessinées. L’attribut clipplanes fonctionne comme SV_ClipDistance, mais fonctionne sur tous les niveaux de caractéristiques matérielles 9_x et plus. Pour plus d’informations, consultez Plans de clip utilisateur sur le matériel de niveau de fonctionnalité 9.

Exemples

Cet exemple provient de BasicHLSL10.fx de l’exemple 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;    
}

Cet exemple d’AdvancedParticles.fx de l’exemple AdvancedParticles illustre l’utilisation d’une sémantique pour le type de retour.

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

Fonctions (DirectX HLSL)