Program

Gli shader non possono essere caricati sul processore grafico direttamente, ma devono essere prima inseriti all'interno di strutture dette "program". Un program è una raccolta di shader programmabili che hanno alcune caratteristiche che li rendono compatibili tra loro.

È possibile definire un elevato numero di program, a cui associare diversi shader. Ciascuno shader può essere associato a più program, ad alto livello, ma in realtà a basso livello di quello shader vengono eseguite più copie. Perciò risulta impossibile comunicare tra un progamma e l'altro: tutte le variabili sono locali al program corrente.

In ogni istante può essere in uso della GPU un solo program e tutti gli shader che contiene sono attivi contemporaneamente. Mentre un program è attivo, tutte i vertici (primitive) inviati alla pipeline vengono processati da quel particolare program, a partire dall'istante in cui quel program è attivato.
È possibile attivare un program, cambiare il program in uso o ripristinare la Fixed Function Pipeline in qualunque momento, eccetto durante la definizione della stessa primitiva (in OpenGL, tra i corrispondenti glBegin e glEnd).

Se all'interno di un program non è definito nessuno shader di un certo tipo, quella parte è sostituita con lo shader di default della Fixed Function Pipeline.
Questo permette di non implementare le parti della pipeline che non si vogliono modificare. Inoltre, viene garantita anche una certa retrocompatibilità: program creati in epoche in cui una certa funzione della pipeline non poteva essere sostituito con uno shader programmato continuano a funzionare esattamente allo stesso modo sulle schede video più recenti.

Tuttavia, quando uno shader di un certo tipo è definito, tutte le funzionalità che la Fixed Function Pipeline eseguiva a quello stadio sono disabilitate. Se servono ancora, sarà necessario reimplementarle manualmente all'interno dello shader.

Più shader dello stesso tipo possono essere assegnati allo stesso program. In questo caso, gli shader sono uniti (fase di "linking") in modo simile ai file oggetto generati dai compilatori nei programmi per la CPU.
Questo significa che deve essere sempre definito uno shader principale, che viene invocato per primo. È questo shader che può chiamare le funzioni che sono definite negli altri shader, che sono trattati come semplici librerie.


Copyright © 2011 Riccardo Monica
Eccetto ove espressamente indicato altrimenti, il contenuto di questa pagina è disponibile secondo la licenza Creative Commons Attribuzione - Condividi allo stesso modo 3.0.