Cadenas de intercambio
Una cadena de intercambio es una colección de búferes que se usan para mostrar fotogramas al usuario. Cada vez que una aplicación presenta un nuevo marco para mostrar, el primer búfer de la cadena de intercambio tiene lugar del búfer mostrado. Este proceso se denomina intercambio o volteo.
Un adaptador de gráficos contiene un puntero a una superficie que representa la imagen que se muestra en el monitor, denominada búfer frontal. A medida que se actualiza el monitor, la tarjeta gráfica envía el contenido del búfer frontal al monitor que se va a mostrar. Sin embargo, esto provoca un problema de "desgarro" al representar gráficos en tiempo real. El corazón del problema es que las frecuencias de actualización del monitor son muy lentas en comparación con el resto del equipo. Las frecuencias de actualización comunes oscilan entre 60 Hz (60 veces por segundo) y 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á a la mitad con la mitad superior de la pantalla que contiene la imagen antigua y la mitad inferior que contiene la nueva imagen. Este problema se conoce como desgarro.
Evitar el desgarro
Direct3D implementa dos opciones para evitar el desgarro:
Una opción para permitir solo las actualizaciones del monitor en la operación de retroceso vertical (o sincronización vertical). Un monitor normalmente actualiza su imagen moviendo un pin claro horizontalmente, zigzagging desde la parte superior izquierda del monitor y terminando en la parte inferior derecha. Cuando el pin de luz llega a la parte inferior, el monitor vuelve a almacenar el pin de luz moviendolo hacia la parte superior izquierda para que el proceso pueda volver a iniciarse.
Esta recalibración se denomina sincronización vertical. Durante una sincronización vertical, el monitor no dibuja nada, por lo que no se verá ninguna actualización del búfer frontal hasta que el monitor empiece a dibujar de nuevo. La sincronización vertical es relativamente lenta; sin embargo, no es lo suficientemente lento como para representar una escena compleja mientras espera. Lo que es necesario para evitar el desgarro y poder representar escenas complejas es un proceso denominado almacenamiento en búfer de reserva.
Una opción para usar una técnica denominada 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. Cualquier superficie que no sea el búfer frontal se denomina superficie fuera de pantalla porque nunca la ve directamente el monitor.
Mediante el uso de un búfer de reserva, una aplicación tiene la libertad de representar una escena cada vez que el sistema está inactivo (es decir, no hay mensajes de Windows en espera) sin tener que tener en cuenta la frecuencia de actualización del monitor. El almacenamiento en búfer de reserva aporta una complicación adicional de cómo y cuándo mover el búfer atrás al búfer frontal.
Volteo de superficie
El proceso de mover el búfer atrás al búfer frontal se denomina volteo de superficie. Dado que la tarjeta gráfica simplemente usa un puntero a una superficie para representar el búfer frontal, un cambio de puntero simple es todo lo que se necesita para establecer el búfer de reserva en el búfer frontal. Cuando una aplicación pide a Direct3D que presente el búfer atrás en el búfer frontal, Direct3D simplemente "voltea" los dos punteros de superficie. El resultado es que el búfer de reserva es ahora el nuevo búfer frontal y el búfer frontal anterior es el nuevo búfer de reserva.
Se invoca un volteo de superficie cada vez que una aplicación pide al dispositivo Direct3D que presente el búfer de reserva; Sin embargo, Direct3D se puede configurar para poner en cola las solicitudes hasta que se produzca una sincronización vertical. Esta opción se conoce como el intervalo de presentación del dispositivo Direct3D. Es posible que los datos del nuevo búfer de retroceso no sean reutilizables, en función de cómo una aplicación especifique cómo Direct3D debe controlar el volteo de superficie.
La volteo de superficie es clave en el software multimedia, de animación y de juego; es equivalente a la forma en que se puede hacer animación con una almohadilla de papel. En cada página, el artista cambia ligeramente las figuras, de modo que cuando se voltea rápidamente entre hojas, el dibujo aparece animado.
Temas relacionados