Catene di scambioSwap chains

Una catena di scambio è una raccolta di buffer utilizzati per la visualizzazione dei fotogrammi all'utente.A swap chain is a collection of buffers that are used for displaying frames to the user. Ogni volta che un'applicazione presenta un nuovo fotogramma per la visualizzazione, il primo buffer della catena di scambio prende il posto del buffer visualizzato.Each time an application presents a new frame for display, the first buffer in the swap chain takes the place of the displayed buffer. Questo processo è definito scambio o capovolgimento.This process is called swapping or flipping.

Una scheda grafica contiene un puntatore a una superficie che rappresenta l'immagine visualizzata sul monitor, chiamata buffer visibile.A graphics adapter holds a pointer to a surface that represents the image being displayed on the monitor, called a front buffer. Quando il monitor viene aggiornato, la scheda grafica invia il contenuto del buffer visibile al monitor perché lo visualizzi.As the monitor is refreshed, the graphics card sends the contents of the front buffer to the monitor to be displayed. Tuttavia, questo determina un problema di "tearing" (strappo) quando esegui il rendering della grafica in tempo reale.However, this leads to a "tearing" problem when rendering real-time graphics. Il nucleo del problema è che la frequenza di aggiornamento del monitor è molto bassa rispetto al resto del computer.The heart of the problem is that monitor refresh rates are very slow in comparison to the rest of the computer. Le comuni frequenze di aggiornamento sono comprese tra 60 Hz (60 volte al secondo) e 100 Hz.Common refresh rates range from 60 Hz (60 times per second) to 100 Hz.

Se l'applicazione aggiorna il buffer visibile durante l'aggiornamento del monitor, l'immagine visualizzata verrà tagliata a metà e la metà superiore dello schermo conterrà l'immagine precedente e la metà inferiore la nuova immagine.If your application is updating the front buffer while the monitor is in the middle of a refresh, the image that is displayed will be cut in half with the upper half of the display containing the old image and the lower half containing the new image. Questo problema è noto come tearing.This problem is referred to as tearing.

Evitare la rimozioneAvoiding tearing

Direct3D offre due opzioni per evitare l'effetto tearing:Direct3D implements two options to avoid tearing:

  • Un'opzione per consentire solo gli aggiornamenti del monitor nell'operazione di ritracciamento verticale (o sincronizzazione verticale).An option to only allow updates of the monitor on the vertical retrace (or vertical sync) operation. Un monitor in genere aggiorna l'immagine spostando a zig zag in senso orizzontalmente un punto luminoso dall'angolo superiore sinistro all'inferiore destro.A monitor typically refreshes its image by moving a light pin horizontally, zigzagging from the top left of the monitor and ending at the bottom right. Quando il punto luminoso raggiunge la fine, il monitor lo ricalibra riportandolo nuovamente nell'angolo superiore sinistro, in modo che il processo possa ricominciare.When the light pin reaches the bottom, the monitor recalibrates the light pin by moving it back to the upper left so that the process can start again.

    Questa ricalibrazione viene chiamata sincronizzazione verticale. Durante una sincronizzazione verticale, il monitor non disegna nulla, quindi nessun aggiornamento al buffer visibile verrà visualizzato finché il monitor non ricomincia a disegnare.This recalibration is called a vertical sync. During a vertical sync, the monitor is not drawing anything, so any update to the front buffer will not be seen until the monitor starts to draw again. La sincronizzazione verticale è relativamente lenta, ma non abbastanza lenta da consentire il rendering di una scena complessa durante l'attesa.The vertical sync is relatively slow; however, not slow enough to render a complex scene while waiting. Quello che serve per evitare l'effetto tearing ed eseguire il rendering di scene complesse è un processo chiamato buffering nascosto.What is needed to avoid tearing and be able to render complex scenes is a process called back buffering.

  • Un'opzione per utilizzare una tecnica chiamata buffering nascosto.An option to use a technique called back buffering. Il buffering nascosto è il processo di disegno di una scena su una superficie fuori dallo schermo, chiamata buffer nascosto.Back buffering is the process of drawing a scene to an off-screen surface, called a back buffer. Qualsiasi superficie diversa dal buffer visibile viene chiamata superficie fuori dallo schermo, perché non viene mai visualizzata direttamente dal monitor.Any surface other than the front buffer is called an off-screen surface because it is never directly viewed by the monitor.

    Se si utilizza un buffer nascosto, un'applicazione ha la possibilità di eseguire il rendering di una scena ogni volta che il sistema è inattivo (vale a dire non sono in attesa messaggi di Windows) senza dover prendere in considerazione la frequenza di aggiornamento del monitor.By using a back buffer, an application has the freedom to render a scene whenever the system is idle (that is, no windows messages are waiting) without having to consider the monitor's refresh rate. Il buffering nascosto introduce la complicazione aggiuntiva di come e quando spostare il buffer nascosto nel buffer visibile.Back buffering brings in an additional complication of how and when to move the back buffer to the front buffer.

Capovolgimento di SurfaceSurface flipping

Il processo di spostamento del buffer nascosto nel buffer visibile viene chiamato inversione di superfici.The process of moving the back buffer to the front buffer is called surface flipping. Dal momento che la scheda grafica usa semplicemente un puntatore a una superficie per rappresentare il buffer visibile, una semplice modifica al puntatore è tutto ciò che è necessario per impostare il buffer nascosto sul buffer visibile.Because the graphics card simply uses a pointer to a surface to represent the front buffer, a simple pointer change is all that is needed to set the back buffer to the front buffer. Quando un'applicazione chiede a Direct3D di presentare il buffer nascosto nel buffer visibile, Direct3D semplicemente inverte i due puntatori alle superfici.When an application asks Direct3D to present the back buffer to the front buffer, Direct3D simply "flips" the two surface pointers. Il risultato è che il buffer nascosto è ora il nuovo buffer visibile e il buffer visibile precedente è il nuovo buffer nascosto.The result is that the back buffer is now the new front buffer, and the old front buffer is the new back buffer.

Un'inversione delle superfici viene richiamata ogni volta che un'applicazione chiede al dispositivo Direct3D di presentare il buffer nascosto; tuttavia, puoi configurare Direct3D in modo da accodare le richieste finché non si verifica una sincronizzazione verticale.A surface flip is invoked whenever an application asks the Direct3D device to present the back buffer; however, Direct3D can be set up to queue the requests until a vertical sync occurs. Questa opzione viene definita come intervallo di presentazione del dispositivo Direct3D.This option is referred to as the Direct3D device's presentation interval. I dati nel nuovo buffer nascosto potrebbero non essere riutilizzabili, a seconda di come un'applicazione specifica il modo in cui Direct3D deve gestire l'inversione delle superfici.The data in the new back buffer may not be reusable, depending on how an application specifies how Direct3D should handle surface flipping.

L'inversione delle superfici è una funzione essenziale nel software multimediale, di animazione e di gioco; è equivalente al modo in cui puoi creare l'animazione con un blocco di carta.Surface flipping is key in multimedia, animation, and game software; it is equivalent to the way you can do animation with a pad of paper. In ogni pagina, l'artista modifica le figure leggermente, in modo che lo scorrimento rapido dei fogli produca l'effetto dell'animazione.On each page, the artist changes the figures slightly, so that when you flip rapidly between sheets, the drawing appears animated.

Argomenti correlatiRelated topics

DispositiviDevices