Procedura: Indicizzare più flussi di output
Nel modello shader 5 un shader geometry può supportare fino a 4 flussi separati. Ciò significa che un singolo shader può restituire tra uno e quattro flussi di output, a seconda del numero di flussi dichiarati.
Per indicizzare più flussi di output
Definire un flusso di dati usando un tipo di modello di flusso.
inout PointStream<OutVertex1> myStream1,
Definire un secondo flusso di dati usando un tipo di modello di flusso.
inout PointStream<OutVertex2> myStream2 )
Eseguire l'output dei dati in flussi (o entrambi) usando le funzioni intrinseche dell'oggetto di output di flusso, ad esempio Append o RestartStrip.
void MyGS( InVertex verts[2], inout PointStream<OutVertex1> myStream1, inout PointStream<OutVertex2> myStream2 ) { OutVertex1 myVert1 = TransformVertex1( verts[0] ); OutVertex2 myVert2 = TransformVertex2( verts[1] ); myStream1.Append( myVert1 ); myStream2.Append( myVert2 ); }
Quando si usa un singolo flusso di output, è possibile generare strip triangoli, strip di linee o elenchi di punti. Quando si archiviano i triangoli e le strisce di riga nel buffer di uscita del flusso, vengono espanse rispettivamente in triangolo e elenchi di righe. È anche possibile rasterizzare un flusso e non inviarlo a un buffer di memoria.
Quando si usano più flussi di output, tutti i flussi devono contenere punti e fino a un flusso di output può essere inviato al rasterizer. Più comunemente, un'applicazione non rasterizzerà alcun flusso.
Dopo aver trasmesso i dati a un buffer, è possibile usare tali dati per eseguire il rendering di qualsiasi tipo primitivo, non solo il tipo primitivo usato per riempire il buffer.
L'output totale del geometry shader è limitato a 1024 scalari. Quando esistono più flussi, il numero di scalari viene calcolato dal tipo di flusso più grande moltiplicato per il numero massimo di vertici.
Differenze tra il modello shader 4 e il modello shader 5:
Modello shader 4:
- Il numero massimo di scalari per l'output del flusso è 64.
- La maschera di registrazione per componente deve corrispondere all'intervallo di indici.
- Il numero massimo di scalari per l'output del flusso è 128.
- La maschera di registrazione per componente non deve corrispondere all'intervallo di indici.
- L'indicizzazione dinamica degli output deve essere legale in tutti i flussi.
- Le modalità di interpolazione non devono corrispondere ai flussi.