oggetto Geometry-Shader

Un oggetto geometry-shader elabora intere primitive. Utilizzare la sintassi seguente per dichiarare un oggetto geometry-shader.

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

Parametri

[maxvertexcount(NumVerts)]

[in] Dichiarazione per il numero massimo di vertici da creare.

  • [maxvertexcount()] - parola chiave obbligatoria; parentesi quadre e parentesi sono necessari caratteri per la sintassi corretta.
  • NumVerts : numero intero che rappresenta il numero di vertici.

ShaderName

[in] Stringa ASCII che contiene un nome univoco per la funzione geometry-shader.

PrimitiveType DataType Name [ NumElements ]

PrimitiveType : tipo primitivo, che determina l'ordine dei dati primitivi.

Tipo primitivo Descrizione
Punto Elenco di punti
Linea Elenco di righe o striscia di righe
Triangolo Elenco triangolo o striscia triangolo
lineadj Elenco di righe con ajacency o striscia linea con ajacency
triangoloadj Elenco triangolo con ajacency o strip triangolo con ajacency

DataType : [in] Tipo di dati di input; può essere qualsiasi tipo di dati HLSL.

Nome - Nome argomento; si tratta di una stringa ASCII.

NumElements : dimensioni della matrice dell'input, che dipende da PrimitiveType , come illustrato nella tabella seguente.

Tipo primitivo NumElements
Punto  [1]
Si opera su un solo punto alla volta.
Linea [2]
Una riga richiede due vertici.
Triangolo [3]
Un triangolo richiede tre vertici.
lineadj [4]
Una lineadj ha due estremità; pertanto, richiede quattro vertici.
triangoloadj [6]
Un triangolo delimita tre triangoli; pertanto, richiede sei vertici.

StreamOutputObject

Dichiarazione dell'oggetto output di flusso.

Valore restituito

nessuno

Osservazioni

Il diagramma seguente illustra i vari tipi primitivi per un oggetto geometry shader.

illustrazione dei vari tipi primitivi per un oggetto geometry shader

Il diagramma seguente mostra le chiamate geometry shader.

illustrazione delle chiamate geometry shader

Esempio

Questo esempio proviene dall'esercizio 1 dal workshop 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();
}

Modello di shader minimo

Questo oggetto è supportato nei modelli shader seguenti.

Modello di shader Supportato
Modelli shader 4 e uno shader superiore

Modello shader 4