En gráficos de computadora , una cadena de intercambio (también swapchain ) es una serie de búferes de cuadros virtuales que utiliza la tarjeta gráfica y la API de gráficos para estabilizar la velocidad de cuadros , reducir el tartamudeo y otros propósitos. Debido a estos beneficios, muchas API de gráficos requieren el uso de una cadena de intercambio. La cadena de intercambio generalmente existe en la memoria gráfica , pero también puede existir en la memoria del sistema. Una cadena de intercambio con dos búferes es un búfer doble .
En cada cadena de intercambio hay al menos dos buffers. El primer framebuffer, el screenbuffer, es el buffer que se renderiza a la salida de la tarjeta de video . Los buffers restantes se conocen como backbuffers. Cada vez que se muestra un nuevo frame , el primer backbuffer en la cadena de intercambio toma el lugar del screenbuffer, esto se llama presentación o intercambio . Se pueden realizar otras acciones en el screenbuffer anterior y otros backbuffers (si existen). El screenbuffer puede simplemente sobrescribirse o devolverse al final de la cadena de intercambio para su posterior procesamiento. La acción realizada la decide la aplicación cliente y depende de la API.
Microsoft Direct3D implementa una clase SwapChain. Cada dispositivo host tiene al menos una cadena de intercambio asignada y la aplicación cliente puede crear otras. [1] La API proporciona tres métodos de intercambio: copiar, descartar y voltear. Cuando SwapChain está configurado para voltear, el búfer de pantalla se copia en el último búfer de respaldo y, a continuación, todos los búferes de respaldo existentes se copian hacia adelante en la cadena. Cuando se configura la copia, cada búfer de respaldo se copia hacia adelante, pero el búfer de pantalla no se envuelve en el último búfer, dejándolo sin cambios. El volteo no funciona cuando solo hay un búfer de respaldo, ya que el búfer de pantalla se copia en el único búfer de respaldo antes de que pueda presentarse. En el modo de descarte, el controlador selecciona el mejor método. [2]
Fuera del contexto de Direct3D, el triple buffering se refiere a la técnica de permitir que una aplicación dibuje en el buffer anterior que se haya actualizado menos recientemente. Esto permite que la aplicación siempre proceda con la renderización, independientemente del ritmo al que la aplicación esté dibujando los fotogramas o del ritmo al que se estén enviando los fotogramas a la pantalla. El triple buffering puede provocar que se descarte un fotograma sin mostrarlo si se renderizan por completo dos o más fotogramas más nuevos en el tiempo que tarda un fotograma en enviarse a la pantalla. Por el contrario, las cadenas de intercambio de Direct3D son una cola estricta de primero en entrar, primero en salir , por lo que cada fotograma que dibuje la aplicación se mostrará incluso si hay fotogramas más nuevos disponibles. Direct3D no implementa una estrategia de intercambio de buffer más reciente, y la documentación de Microsoft denomina "triple buffering" a una cadena de intercambio de Direct3D de tres buffers. El triple buffering, como se describió anteriormente, es superior para fines interactivos como los juegos, pero las cadenas de intercambio de Direct3D de más de tres buffers pueden ser mejores para tareas como la presentación de fotogramas de un vídeo en el que el tiempo necesario para decodificar cada fotograma puede ser muy variable. [3]