Partager via


objet Geometry-Shader

Un objet geometry-shader traite des primitives entières. Utilisez la syntaxe suivante pour déclarer un objet geometry-shader.

[maxvertexcount(NumVerts)] void ShaderName ( PrimitiveType DataType Name [ NumElements ], inout StreamOutputObject );

Paramètres

[maxvertexcount(NumVerts)]

[in] Déclaration pour le nombre maximal de sommets à créer.

  • [maxvertexcount()] : mot clé obligatoire ; les crochets et les parenthèses sont des caractères requis pour une syntaxe correcte.
  • NumVerts : nombre entier représentant le nombre de sommets.

ShaderName

[in] Chaîne ASCII qui contient un nom unique pour la fonction geometry-shader.

Nom du type de données PrimitiveType [ NumElements ]

PrimitiveType : type primitif, qui détermine l’ordre des données primitives.

Type primitif Description
Point Liste de points
Ligne Liste de lignes ou bande de lignes
triangle Liste de triangles ou bande de triangles
lineadj Liste de lignes avec adjacence ou bande de trait avec adjacence
triangleadj Liste de triangles avec adjacence ou bande de triangles avec adjacence

DataType : [in] Type de données d’entrée ; peut être n’importe quel type de données HLSL.

Nom - Nom de l’argument ; il s’agit d’une chaîne ASCII.

NumElements : taille de tableau de l’entrée, qui dépend du PrimitiveType , comme indiqué dans le tableau suivant.

Type primitif NumElements
Point [1]
Vous n’utilisez qu’un seul point à la fois.
Ligne [2]
Une ligne nécessite deux sommets.
triangle [3]
Un triangle nécessite trois sommets.
lineadj [4]
Un lineadj a deux extrémités ; par conséquent, il nécessite quatre sommets.
triangleadj [6]
Un triangleadj borde trois autres triangles ; par conséquent, il nécessite six sommets.

StreamOutputObject

Déclaration de l’objet stream-output.

Valeur de retour

None

Notes

Le diagramme suivant montre les différents types primitifs d’un objet de nuanceur geometry.

illustration des différents types primitifs d’un objet de nuanceur geometry

Le diagramme suivant montre les appels de nuanceur geometry.

illustration d’appels de nuanceur geometry

Exemples

Cet exemple est tiré de l’exercice 1 de l’atelier Direct3D 10 Shader Model 4.0.

[maxvertexcount(3)]
void GSScene( triangleadj GSSceneIn input[6], inout TriangleStream<PSSceneIn> OutputStream )
{   
    PSSceneIn output = (PSSceneIn)0;

    for( uint i=0; i<6; i+=2 )
    {
        output.Pos = input[i].Pos;
        output.Norm = input[i].Norm;
        output.Tex = input[i].Tex;
        
        OutputStream.Append( output );
    }
    
    OutputStream.RestartStrip();
}

Modèle de nuanceur minimal

Cet objet est pris en charge dans les modèles de nuanceur suivants.

Modèle de nuanceur Pris en charge
Nuanceur modèle 4 et modèles de nuanceur supérieur Oui

Modèle de nuanceur 4