Come già
illustrato in precedenza, i sistemi grafici moderni possono essere
pensati come una catena di montaggio. L'unità centrale di processo
(CPU) invia i comandi di disegno. Tuttavia l'hardware installato deve
effettuare altre operazioni e trasformazioni geometriche. Viene
effettuato il clipping, seguita da ombreggiatura e texture. Infine i
valori sono scritti in piani di bit per lo schermo. Nelle
architetture ad alto livello queste operazioni sono effettuate da
componenti hardware diverse, le quali sono state progettate per
operazioni specifiche da completare velocemente. In questo modo la
CPU non deve attendere che ogni comando di disegno sia completato per
eseguirne un altro. Mentre la CPU si trova al vertice della catena di
montaggio, le altre componenti effettuano le operazioni successive.
Inoltre l'applicazione può essere eseguita più macchine
contemporaneamente, attraverso connessioni di rete che costituiscono
un legame client - server. Tutto questo può essere estremamente
inefficiente se la rete esegue un comando per volta, in quanto vi può
essere un notevole ritardo nella trasmissione. Solitamente il client
raccogli un insieme di comandi prima di inviare il pacchetto di dati.
Per questo motivo OpenGL fornisce il comando glFlush(),
il quale forza il client ad inviare il pacchetto di rete anche se non
fosse al completo. Dove non vi è una rete collegata tutti i comandi
sono eseguiti immediatamente sul server, e glFlush() non
ha alcun effetto. Comunque se si sta scrivendo una applicazione che
possa lavorare bene con o senza rete, è bene aggiungere il comando
glFlush() al termine
di ogni immagine o scena. Da notare che glFlush()
non attende che il fotogramma sia completo, solo forza il disegno ad
essere eseguito, quindi garantisce che tutti i precedenti comandi
esecutivi
in un tempo finito e non vi siano altri comandi eseguiti. Altre
situazioni alle quali glFlush() è utile:
- Render via software che costruisce una immagine in memoria e non vuole aggiornare lo schermo continuativamente;
- Implementare una raccolta dei comandi per ammortizzare i costi di avvio. Come citato nell'esempio della rete di macchine.
Nessun commento:
Posta un commento