Effetti (Direct3D 9)

Un effetto Microsoft DirectX consente l'integrazione di vertex e pixel shader con stato della pipeline per il rendering di oggetti. Gli effetti sono il passaggio logico successivo per combinare shader per produrre condizioni di rendering univoche.

Gli effetti offrono anche un modo pratico per scrivere shader per versioni hardware diverse. Poiché diverse schede video supportano funzionalità diverse, un'applicazione può scrivere diverse tecniche che verranno eseguite su un'ampia gamma di dispositivi. In questo modo, se l'applicazione è in esecuzione sull'hardware più recente e più grande, l'applicazione può eseguire la tecnica di effetto più sofisticata. D'altra parte, le tecniche di effetto meno sofisticate possono essere scelte automaticamente per l'esecuzione su hardware meno costoso o meno compatibile.

Un effetto può sostituire l'elaborazione del vertice e parte dell'elaborazione pixel eseguita dalla pipeline grafica. Un esempio di effetto che usa un vertex shader e un pixel shader si trova nell'esempio BasicHLSL. È possibile ottenere questo esempio e scoprirlo da DirectX SDK. Per informazioni su DirectX SDK, vedere Dove è DirectX SDK?.

Per altre informazioni sugli effetti, vedere questi argomenti:

Effetti e pipeline 3D

Il diagramma seguente mostra la pipeline.

diagramma della pipeline 3d

La pipeline trasforma i dati di input in pixel di output che riempiono il buffer di frame. I dati di input provengono da oggetti costituiti da vertici nello spazio degli oggetti o superfici di ordine superiore create da patch N, patch rettangolo e patch triangolari. Dopo che i dati di input sono stati tessellati, la pipeline esegue l'elaborazione dei vertici, l'elaborazione primitiva e l'elaborazione dei pixel prima di generare i colori dei pixel finali.

L'elaborazione dei vertici e dei pixel può essere eseguita dalla pipeline di funzione fissa oppure può essere implementata con shader programmabili. La tessellazione dei dati di input, l'elaborazione primitiva e gli output dei dati sono controllati dallo stato della pipeline. Tutto ciò può essere integrato in un effetto. Un effetto imposta lo stato che controlla la modalità di funzionamento della pipeline. Gli effetti gestiscono shader programmabili e lo stato predefinito della funzione.

Gli effetti possono salvare e ripristinare lo stato, lasciando il dispositivo nello stesso stato di prima dell'esecuzione dell'effetto. I tipi di stato che un effetto può gestire includono:

  • Stato shader. Ciò include la creazione e l'eliminazione di shader, l'impostazione delle costanti shader, l'impostazione dello stato dello shader e il rendering con shader.
  • Stato trama e sampler. Ciò include la specifica dei file di trama, l'inizializzazione delle fasi della trama, la creazione di oggetti sampler e l'impostazione dello stato dell'esempio.
  • Altro stato della pipeline. Sono inclusi gli stati per impostare trasformazioni, illuminazione, materiali e opzioni di rendering. Queste possono essere variabili globali o locali. Le variabili possono essere impostate dall'effetto stesso o dall'applicazione.

Gli effetti contengono più opzioni di rendering denominate tecniche. Ogni tecnica incapsula le variabili globali, lo stato della pipeline, lo stato della trama e dell'sampler e lo stato dello shader. Uno stile singolo viene implementato in un passaggio di rendering. Uno o più passaggi possono essere incapsulati in una tecnica. Tutte le tecniche e i passaggi possono essere convalidati per verificare se il codice dell'effetto verrà eseguito nel dispositivo hardware.

Effetti Salva e ripristina stato

Gli effetti gestiscono lo stato. Lo stato della parola viene usato in modo molto ampio qui perché include tutti i tipi di informazioni che la pipeline deve specificare le condizioni di rendering. Ciò include quasi tutte le aree funzionali della pipeline.

Le opzioni di rendering sono controllate dalle tecniche e dai passaggi. Un'applicazione esegue il rendering di un effetto impostando una tecnica attiva e eseguendo il rendering di uno o più passaggi. Tutto il rendering in un effetto viene eseguito all'interno di una coppia corrispondente di chiamate Begin e End . Quando begin viene chiamato, viene creato un blocco di stato e lo stato del dispositivo viene salvato (a meno che non si specifica diversamente). Dopo il rendering di una tecnica, l'applicazione specifica per il rendering, End viene chiamato per terminare la tecnica attiva. Il sistema dell'effetto risponde ripristinando automaticamente lo stato della pipeline acquisito nel blocco di stato (a meno che non si scelga di disabilitare questa funzionalità di salvataggio e ripristino).

Quando si programmano sequenze di rendering multiple-pass, ognuna delle quali richiede la propria configurazione dello stato, gli effetti possono ridurre le pulizie necessarie per tenere traccia delle modifiche dello stato. Per altre informazioni sugli stati che possono essere salvati e ripristinati dagli effetti, vedere Stati di effetto (Direct3D 9).

Gli effetti possono condividere i parametri

I parametri degli effetti sono tutte le variabili non statiche dichiarate in un effetto. Ciò può includere variabili globali e annotazioni. I parametri dell'effetto possono essere condivisi tra diversi effetti dichiarando parametri con la parola chiave condivisa e quindi creando l'effetto con un pool di effetti.

Gli effetti clonati usano lo stesso pool di effetti dell'effetto da cui vengono clonati. La clonazione di un effetto crea una copia esatta di un effetto, incluse variabili globali, tecniche, passaggi e annotazioni.

Guida alla programmazione per Direct3D 9