Newsgroup: it.comp.hardware.video-3d
Titolo: triple buffering

c'è qualcuno che sa dirmi cosa significa e a cosa serve questa funzione.
rispondetemi anche in e-mail ciao!!

NOTA: uso indistintamente anche se in modo inesatto il termine "fotogramma"
per "frame", ovviamente intendo la stessa cosa anche se i fotogrammi nel
caso specifico dell'animazione su computer non c'entrano nulla.
L'animazione su computer (sia essa 2D o 3D) richiede l'uso di almeno 2
buffer, cioe' aree di memoria.
Una viene inviata al video dal DAC (buffer primario) mentre nell'altra viene
creato il frame successivo a quello visualizzato (buffer secondario).
Si usa questa tecnica, detta double buffering, perche' se si disegnasse
nella stessa area di memoria mentre questa viene invata al video si vedrebbe
il ridisegno, ottenendo uno sfarfallio dell'immagine che rovinerebbe
completamente l'animazione.
Con il double buffering si puo' invece disegnare nel buffer che non viene
visualizzato, senza quindi che si possa vedere l'immagine mentre viene
creata. Quando questa e' completa si scambia il buffer che prima era
visualizzato con quello completato, in modo che il passaggio a video da un
frame all'altro avvenga istantaneamente tra due frame completamente
disegnati.
Il buffer che era prima usato per la visualizzazione viene poi cancellato e
usato come buffer secondario, ripetendo il ciclo.
Il problema e' che lo scambio tra i due buffer non puo' avvenire in istanti
qualsiasi, deve avvenire in un momento in cui il frame precedente e' stato
completamente inviato al monitor, cioe' negli istanti detti di vertical
blank, in cui il cannone elettronico viene spostato dall'angolo
all'estremita' in basso del cinescopio a quello in alto all'inizio del ciclo
di scansione. Scambiare i buffer in altri istanti, cioe' mentre il DAC sta
inviando i dati, vorrebbe dire visualizzare una "composizione" dei due
fotogrammi: se si scambia i buffer quando il cannone elettronico e' a meta'
del cinescopio la parte superiore del monitor visualizza il vecchio
fotogramma, mentre il DAC completa il quadro con la parte inferriore del
nuovo.
Dato che di solito i frame sono diversi, l'immagine finale risulta appunto
composta da due immagini diverse, e il punto in cui le due si collegano in
genere appare come una linea che "spezza" l'immagine. Se lo scambio avviene
molte volte durante la scansione del cinescopio appaiono tante righe che
sono proprio causate da questo fenomeno, detto "tearing".
Per evitarlo quindi bisogna scambiare i buffer solo ad intervalli regolari,
cioe' quando il DAC ha inviato in frame completo. Ora, se il refresh del
video e' di 60Hz, il DAC impiega 1/60 di secondo per inviarlo, quindi noi
possiamo scambiare buffer una volta per "passaggio", cioe' 60 volte al
secondo corrispondenti a 60 fps, oppure una volta ogni 2 "passaggi" del DAC,
cioe' a 30 fps, una volta ogni 3, cioe' a 20 fps.
Insomma non e' possibile ottenere ad esempio 27 fps o 40 fps, semplicemente
perche' se anche il chip 3D ha finito di disegnare il frame successivo, non
puo' scambiarlo finche' il DAC non ha finito a sua volta. Il chip 3D si
trova quindi limitato rispetto alle sue prestazioni massime, perche' deve
aspettare senza poter fare nulla, anche se sarebbe pronto a lavorare al
frame successivo. Pero' di buffer ce ne sono solo 2, uno e' pronto e l'altro
deve finire di essere visualizzato.
Un alternativa per guadagnare in prestazioni e' attuare comunque lo scambio
appena il nuovo frame e' pronto. In questo modo il chip 3D lavora sempre in
continuazione, ma si perde il sincronismo detto sopra, pagandolo con la
comparsa piu' o meno evidente del tearing. Questo e' quello che succede
quando nei driver o nella configurazione di una scheda si "disabilita
l'attesa per il vsync". Il vsync o segnale di sincronia verticale e' quello
che viene inviato per controllare il movimento verticale del cannone, e il
vertical blank e' quello appunto il tempo in cui il segnale di vsync riporta
il cannone alla posizione piu' elevata del cinescopio senza disegnare nulla.
Come fare per mantenere il sincronismo ma permettere al chip 3D di
continuare comunque a lavorare anche se il DAC non ha finito? Se si dispone
della memoria necessaria si puo' usare un terzo buffer, cioe' mettere subito
al lavoro il chip per creare un nuovo frame su una nuova area di memoria. In
questo modo si ha un ciclo di 3 buffer: uno e' in via di visualizzazione,
uno e' completo ma deve aspettare il vertical blank per essere visualizzato,
il terzo e' in via di creazione.
Questo e' quindi il vantaggio del triple buffering: non e' piu' veloce di
quanto si possa ottenere disabilitando l'attesa del vsync, ma permette di
aumentare le prestazioni rispetto al double buffering con attesa senza pero'
incorrere nei difetti di visualizzazione che appasiono quando si disabilita
tale attesa.
--
-=================[ ICQ:   787595 ]=================-
       Marco Braga - Email: 
bra...@tin.it
            F.A.Q. sulle schede 3D / 3dfx
 
http://www.ludus.com/TECNICO/schede3d/
 Join The Wild Wereboar Team  RC5-64 Project effort!
 
http://www.geocities.com/SiliconValley/Horizon/5766
-===================================================-


wrote:

CLAP CLAP CLAP CLAP CLAP CLAP CLAP 
Complimenti! Ne sai davvero a tronchi! Complimenti sinceri... ma sei
un professore o qualcosa di simile per caso? 
~MeRcURIO~ 
IL~MaGo~
oxxxxxxxxx]::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>
WWW:    
users.iol.it/riccardo.malossi
 
 
www.geocities.com/MotorCity/8598
 
www.geocities.com/Area51/3111
 
www.geocities.com/NapaValley/2194
 
www.geocities.com/TimesSquare/Dungeon/7585
EMAIL:  
riccardo...@iol.it
 
mago...@hotmail.com
 
mago...@hotmail.com
 
game...@hotmail.com
 
ma...@2-cool.com
 
ma...@1coolplace.com
ICQ UIN:731543
<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::[xxxxxxxxxo

BRAVO!!!
Mi associo ai complimenti, ecco finelmente qualcuno che ne capisce di
video-3d (ultimamento questo gruppo sembra popolota esclusivamente da
smanettoni e/o 3DFX Lovers).
Perche' non metti su una home page (se non ce l'hai gia') in modo che tutti
possano apprendere dalle tue conoscenze ?!
...anch'io sono curioso: sei un professore ?
CIAO!

possano apprendere dalle tue conoscenze ?!
...mai sentito parlare di signature?  ;-)
Con simpatia, Mac.
Antispam? Si grazie!
   Per rispondere in e-mail
   anteporre "Ultra" a "Mac" nell'indirizzo!

un professore o qualcosa di simile per caso?
Grazie. Non sono un professore ne' "qualcosa di simile", per chi e' curioso.


possano apprendere dalle tue conoscenze ?!
Vedi nella signature.
