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.

