Newsgroup: it.comp.lang.c
Titolo: Double buffering

Su alcuni messaggi precedenti ho letto di questa tecnica di accelerazione e
vorrei chiedervi dove posso trovare informazioni a riguardo.
Il mio problema è che vorrei modificare un programma, che attualmente
impiega molto tempo per completare la visualizzazione di alcune forme
d'onda, utilizzando un meccanismo di buffering.
Ma non sono sicuro di conoscere la tecnica migliore.
ciao, Marco

Ma non sono sicuro di conoscere la tecnica migliore.
Tutto si basa sull'utilizzo di due superfici di visualizzazione, una
visibile sul monitor dell'utente e una nascosta, invece che una.
Utilizzando una sola superfice di visualizzazione č necessario aspettare il
vertical retrace (credo si chiami cosě quel piccolo intervallo in cui il
cannone elettronico smette di aggiornare il video per riportarsi alla sua
posizione originale) per poter disegnare a schermo, pena disturbi alle
immagini.
Utilizzando invece due superfici di visualizzazione si tracciano le immagini
sulla superfice nascosta e si aspetta il vertical retrace per scambiare o
copiare (a seconda di ciň che permette l'hardware) la superfice nascosta con
quella visibile.
In questo modo si ottimizzando i tempi di disegno (non si č limitati a
disegnare solo durante il brevissimo tempo del vertical retrace) e si
possono raggiungere alti frame rate.
Ciao, Giuseppe
---------------------------------------------------------------------------
_Guybrush su IRCNet canale #programmazione
---------------------------------------------------------------------------

piů fluide le animazioni.
Potrei perň usare qualcosa di simile per velocizzare il repaint di una
finestra? Quello che voglio fare č conservare una immagine della finestra in
modo che non sia costretto a ricalcolare le forme d'onda visualizzate ogni
volta che qualche area della finestra viene coperta da qualcos'altro.
Dovrebbe esistere qualche modo per ridisegnare velocemente una regione
trasferendola da un buffer di memoria. Vero?

you wrote :
#Utilizzando una sola superfice di visualizzazione è necessario aspettare il
#vertical retrace (credo si chiami così quel piccolo intervallo in cui il
#cannone elettronico smette di aggiornare il video per riportarsi alla sua
#posizione originale) per poter disegnare a schermo, pena disturbi alle
#immagini.
Diciamo che si utilizza se non altro come tecnica per la
visualizzazione veloce di piu' fotogrammi, senza badare troppo al
retrace verticale, il cui controllo e' comunque vantaggioso.
Andrea Laforgia        (
andrea_...@bigfoot.com
)
----------------------------------------------------
There is nothing better for understanding a kangaroo
than seeing it jump.
----------------------------------------------------

trasferendola da un buffer di memoria. Vero?
Allora il problema cambia ma il double buffering puň esserti d'aiuto.
Disegna i tuoi grafici in una zona di memoria non visibile e ogni volta che
devi ridisegnare a schermo copia la porzione di immagine che ti interessa da
questa memoria. Se ci dici per quale piattaforma stai sviluppando e, meglio,
che compilatore usi, possiamo cercare di aiutarti.
Ciao, Giuseppe
---------------------------------------------------------------------------
_Guybrush su IRCNet canale #programmazione
ICQ: 42227764
---------------------------------------------------------------------------

retrace verticale, il cui controllo e' comunque vantaggioso.
Al retrace verticale bisogna comunque badare altrimenti non si è concluso
nulla.


you wrote :
#Al retrace verticale bisogna comunque badare altrimenti non si è concluso
#nulla.
Chi l'ha detto ?
Ho precisato che l'attenzione per il retrace verticale e' senza dubbio
vantaggiosa ma questo non significa che sia essenziale.
Il double buffering serve principalmente per visualizzare a video
direttamente l'immagine completa senza far vedere all'utente i
dettagli della sua costruzione


dettagli della sua costruzione
Questo può essere un motivo per utilizzare il double buffering, ma è raro.
Di solito il double buffering viene utilizzato per velocizzare e rendere più
fluide le animazioni.


che compilatore usi, possiamo cercare di aiutarti.
Il programma è realizzato per Windows a 16 bit. In realtà in passato è stata
realizzata in parallelo anche una versione per linux. Per me sarebbe meglio
(ma non è strettamente necessario) usare qualche tecnica facilmente
esportabile anche su linux. Purtroppo non uso un solo compilatore perchè a
casa ho il Borland C++ vers. 5.01, mentre all'università devo utilizzare il
Visual C++ (non ricordo la versione ma comunque è una delle prime che
supporta soltanto la compilazione a 16 bit). Questo vecchio compilatore è
l'unica ragione per la quale siamo costretti a compilare a 16 bit. (Io
comunque ho anche il Visual C++ 5.0 ma non posso usarlo perchè non compila a
16 bit).
ciao, Marco

#Questo puņ essere un motivo per utilizzare il double buffering, ma č raro.
Questo E' il motivo del suo utilizzo e non e' affatto raro.
La documentazione in rete te ne da' conferma.
Concluderei qui la discussione.


funzioni anche su schede grafiche e monitor diversi).
Utilizzando le le Bitmap e le funzioni BitBlt e BitBltEx.
Ho una mezza idea su come risolvere il problema che ho concretizzato nel
file allegato. Il codice è per win32 ma credo sia facilmente portabile per
win16. Spero possa esserti di aiuto.
Ciao, Giuseppe
---------------------------------------------------------------------------
_Guybrush su IRCNet canale #programmazione
ICQ: 42227764
---------------------------------------------------------------------------
begin 666 Double Buffer with GDI.c
<encoded_portion_removed>