Effetti (Direct3D 11)

Un effetto DirectX è una raccolta di stato della pipeline, impostata da espressioni scritte in HLSL e una sintassi specifica per il framework degli effetti.

Dopo aver compilato un effetto, usare le API del framework degli effetti per il rendering. La funzionalità dell'effetto può variare da un elemento semplice come un vertex shader che trasforma la geometria e un pixel shader che restituisce un colore a tinta unita, a una tecnica di rendering che richiede più passaggi, usa ogni fase della pipeline grafica e modifica lo stato dello shader e lo stato della pipeline non associato agli shader programmabili.

Il primo passaggio consiste nell'organizzare lo stato che si desidera controllare in un effetto. Sono inclusi lo stato dello shader (vertex, hull, domain, geometry, pixel e compute shader), lo stato di trama e campionatore usato dagli shader e altri stati della pipeline non programmabili. È possibile creare un effetto in memoria come stringa di testo, ma in genere le dimensioni diventano sufficientemente grandi da poter archiviare lo stato dell'effetto in un file di effetto (un file di testo che termina con estensione fx). Per usare un effetto, è necessario compilarlo (per controllare la sintassi HLSL e la sintassi del framework degli effetti), inizializzare lo stato dell'effetto tramite chiamate API e modificare il ciclo di rendering per chiamare le API di rendering.

Un effetto incapsula tutto lo stato di rendering richiesto da un particolare effetto in una singola funzione di rendering denominata tecnica. Un passaggio è un sottoinsieme di una tecnica che contiene lo stato di rendering. Per implementare un effetto di rendering a più passaggi, implementare uno o più passaggi all'interno di una tecnica. Si supponga, ad esempio, di voler eseguire il rendering di una geometria con un set di buffer depth/stencil e quindi disegnare alcuni sprite sopra. È possibile implementare il rendering della geometria nel primo passaggio e il disegno sprite nel secondo passaggio. Per eseguire il rendering dell'effetto, è sufficiente eseguire il rendering di entrambi i passaggi nel ciclo di rendering. È possibile implementare un numero qualsiasi di tecniche in un effetto. Naturalmente, maggiore è il numero di tecniche, maggiore sarà il tempo di compilazione per l'effetto. Un modo per sfruttare questa funzionalità consiste nel creare effetti con tecniche progettate per l'esecuzione su hardware diverso. Ciò consente a un'applicazione di effettuare normalmente il downgrade delle prestazioni in base alle funzionalità hardware rilevate.

Un set di tecniche può essere raggruppato in un gruppo (che usa la sintassi "fxgroup"). Le tecniche possono essere raggruppate in qualsiasi modo. Ad esempio, è possibile creare più gruppi, uno per ogni materiale; ogni materiale potrebbe avere una tecnica per ogni livello hardware; ogni tecnica avrebbe un set di passaggi che definiscono il materiale sull'hardware specifico.

Contenuto della sezione

Argomento Descrizione
Organizzazione dello stato in un effetto
Con Direct3D 11, lo stato di effetto per determinate fasi della pipeline è organizzato in base alle strutture.
Interfacce di sistema effect
Il sistema di effetti definisce diverse interfacce per la gestione dello stato dell'effetto.
Interfacce specializzate
ID3DX11EffectVariable include diversi metodi per eseguire il cast dell'interfaccia nel tipo specifico di interfaccia necessario.
Interfacce e classi negli effetti
Esistono molti modi per usare classi e interfacce in Effetti 11.
Rendering di un effetto
Un effetto può essere usato per archiviare le informazioni o per eseguire il rendering usando un gruppo di stato.
Clonazione di un effetto
La clonazione di un effetto crea una seconda copia quasi identica dell'effetto.
Sintassi di streaming out
Un geometry shader con stream out viene dichiarato con una sintassi specifica.
Differenze tra effetti 10 ed effetti 11
Questo argomento illustra le differenze tra Gli effetti 10 e Gli effetti 11.

Guida alla programmazione per Direct3D 11