2.4. Definizione delle tecniche di shading

4
Il tuo voto: Nessuno Media: 4 (1 vote)

Il codice seguente definisce due tecniche: textured e litTextured. Queste tecniche saranno disponibili e selezionabili da codice C# tramite il campo Techniques[] della classe Effect di XNA specificando tra le parentesi quadre una stringa con il nome della tecnica stessa. Attenzione: il riconoscimento è case-sensitive quindi una textured non è uguale a Textured.

 91 // Dichiarazione della tecnica da utilizzare per un rendering
 92 // con illuminazione costante
 93 technique textured
 94 {
 95     pass P0
 96     {
 97         ZEnable = true;
 98         ZWriteEnable = true;
 99         AlphaBlendEnable = false;
100         FillMode = solid;
101         VertexShader = compile vs_2_0 mainVS();
102         PixelShader = compile ps_2_0 texturedPS();
103     }
104 }
105 
106 // Dichiarazione della tecnica da utilizzare per un rendering
107 // con illuminazione diffusa
108 technique litTextured
109 {
110     pass P0
111     {
112         ZEnable = true;
113         ZWriteEnable = true;
114         AlphaBlendEnable = false;
115         FillMode = solid;
116         VertexShader = compile vs_2_0 mainVS();
117         PixelShader = compile ps_2_0 litTexturedPS();
118     }
119 }

Come è possibile vedere per ogni tecnica è necessario specificare, con la parola chiave pass seguita dal un nome definibile dall'utente, il numero di passaggi necessari per renderizzarla. Ogni passaggio ha un blocco di parametri che agiscono direttamente sul RenderState della GPU e questo permette, per le tecniche che comprendono più passaggi, di modificare eventualmente alcuni di essi per ottenere effetti particolari ad esempio di blending di colore. Successivamente vedremo dove recuperare i nomi di questi parametri ed i valori ad essi assegnabili.

I due parametri VertexShader e PixelShader sono quelli più importanti perchè specificano quale funzione, dichiarata nella sezione precedente del file .fx, utilizzare come principale rendendo noto il punto da cui eseguire il frammento di codice dello shader. Le parole chiave compile, vs_2_0 e ps_2_0 indicano rispettivamente che la funzione specificata di seguito sarà un Vertex Shader model 2.0 e un Pixel Shader model 2.0. Specificare la versione del Vertex Shader e del Pixel Shader è importantissimo perchè solo così il compilatore saprà quale set di istruzioni utilizzare e a run-time il framework saprà determinare se una scheda grafica supporta o no quel determinato effetto.