Cadenas de intercambioSwap chains

Una cadena de intercambio es una colección de búferes que se usan para mostrar fotogramas al usuario.A swap chain is a collection of buffers that are used for displaying frames to the user. Cada vez que una aplicación presenta un nuevo marco para mostrar, el primer búfer de la cadena de intercambio toma el lugar del búfer que se muestra.Each time an application presents a new frame for display, the first buffer in the swap chain takes the place of the displayed buffer. Este proceso se denomina intercambio o inversión.This process is called swapping or flipping.

Un adaptador de gráficos mantiene un puntero en una superficie que representa la imagen que se muestra en el monitor, llamado búfer frontal.A graphics adapter holds a pointer to a surface that represents the image being displayed on the monitor, called a front buffer. Cuando se actualiza el monitor, la tarjeta gráfica envía el contenido del búfer frontal al monitor para que se muestre.As the monitor is refreshed, the graphics card sends the contents of the front buffer to the monitor to be displayed. Sin embargo, esto produce un problema de "división" a la hora de representar gráficos en tiempo real.However, this leads to a "tearing" problem when rendering real-time graphics. El problema principal es que las frecuencias de actualización de los monitores son muy lentas en comparación con el resto del equipo.The heart of the problem is that monitor refresh rates are very slow in comparison to the rest of the computer. Las frecuencias de actualización habituales van de los 60 Hz (60 veces por segundo) a los 100 Hz.Common refresh rates range from 60 Hz (60 times per second) to 100 Hz.

Si la aplicación actualiza el búfer frontal mientras el monitor está en medio de una actualización, la imagen que se muestra se cortará por la mitad, y la mitad superior de la pantalla contendrá la imagen anterior y la mitad inferior contendrá la imagen nueva.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. Este problema se conoce como división.This problem is referred to as tearing.

Evitar desgarroAvoiding tearing

Direct3D implementa dos opciones para evitar las divisiones:Direct3D implements two options to avoid tearing:

  • Una opción para permitir solamente las actualizaciones del monitor en la operación de retrazado vertical (o sincronización vertical).An option to only allow updates of the monitor on the vertical retrace (or vertical sync) operation. Un monitor normalmente actualiza su imagen moviendo un punto de luz horizontalmente, en zigzag desde la parte superior izquierda del monitor hasta la parte inferior derecha.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. Cuando el punto de luz llega al final, el monitor vuelve a calibrar dicho punto de la luz moviéndolo hacia atrás hasta la parte superior izquierda, para que el proceso pueda empezar de nuevo.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.

    Esta recalibración se denomina sincronización vertical. Durante una sincronización vertical, el monitor no dibuja nada, por lo que no se ven las actualizaciones en el búfer frontal hasta que el monitor comienza a dibujar otra vez.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 sincronización vertical es relativamente lenta; sin embargo, no es tan lenta como para representar una escena compleja mientras se espera.The vertical sync is relatively slow; however, not slow enough to render a complex scene while waiting. Lo que se necesita para evitar las divisiones y poder representar escenas complejas es un proceso denominado almacenamiento en búfer de reserva.What is needed to avoid tearing and be able to render complex scenes is a process called back buffering.

  • Una opción es usar una técnica llamada almacenamiento en búfer de reserva.An option to use a technique called back buffering. El almacenamiento en búfer de reserva es el proceso de dibujar una escena en una superficie fuera de la pantalla, denominada búfer de reserva.Back buffering is the process of drawing a scene to an off-screen surface, called a back buffer. Cualquier superficie que no sea el búfer frontal se conoce como superficie fuera de la pantalla, ya que el monitor nunca la ve directamente.Any surface other than the front buffer is called an off-screen surface because it is never directly viewed by the monitor.

    Mediante el uso de un búfer de reserva, una aplicación tiene la libertad de representar una escena siempre que el sistema esté inactivo (es decir, que no haya mensajes de ventanas en espera) sin necesidad de tener en cuenta la frecuencia de actualización 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. El almacenamiento en búfer de reserva produce una complicación: cómo y cuándo se debe pasar el búfer de reserva al búfer frontal.Back buffering brings in an additional complication of how and when to move the back buffer to the front buffer.

Voltear expuestaSurface flipping

El proceso de mover el búfer de reserva al búfer frontal se denomina desplazamiento de la superficie.The process of moving the back buffer to the front buffer is called surface flipping. Como la tarjeta gráfica simplemente usa un puntero en una superficie para representar el búfer frontal, un sencillo cambio del puntero es todo lo que se necesita para establecer el búfer de reserva en el búfer frontal.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. Cuando una aplicación pide a Direct3D presentar el búfer de reserva en el búfer frontal, Direct3D simplemente "desplaza" los dos punteros de superficie.When an application asks Direct3D to present the back buffer to the front buffer, Direct3D simply "flips" the two surface pointers. El resultado es que el búfer de reserva ahora es el nuevo búfer frontal, y el antiguo búfer frontal es el nuevo búfer de reserva.The result is that the back buffer is now the new front buffer, and the old front buffer is the new back buffer.

Se invoca un desplazamiento de las superficies siempre que una aplicación solicita al dispositivo de Direct3D que presente el búfer de reserva; sin embargo, Direct3D puede configurarse para poner en cola las solicitudes hasta que se produzca una sincronización vertical.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. Esta opción se conoce como el intervalo de presentación del dispositivo de Direct3D.This option is referred to as the Direct3D device's presentation interval. Los datos del nuevo búfer de reserva no pueden ser reutilizables, dependiendo de cómo una aplicación especifica el modo en que Direct3D debe administrar el desplazamiento de las superficies.The data in the new back buffer may not be reusable, depending on how an application specifies how Direct3D should handle surface flipping.

El desplazamiento de superficies es clave en el software multimedia, de animación y de juegos; es el equivalente a la manera en que se realiza animación con un bloc de notas.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. En cada página, el artista cambia las figuras ligeramente, para que cuando se desplacen rápidamente las hojas, el dibujo parezca animado.On each page, the artist changes the figures slightly, so that when you flip rapidly between sheets, the drawing appears animated.

Temas relacionadosRelated topics

DispositivosDevices