En gráficos por computadora , una cadena de intercambio (también swapchain ) es una serie de framebuffers virtuales utilizados por la tarjeta gráfica y la API de gráficos para estabilizar la velocidad de cuadros , reducir la tartamudez y varios otros propósitos. Debido a estos beneficios, muchas API de gráficos requieren el uso de una cadena de intercambio. La cadena de intercambio suele existir en la memoria de gráficos , pero también puede existir en la memoria del sistema. Una cadena de intercambio con dos buffers es un buffer doble .
En cada cadena de intercambio hay al menos dos buffers. El primer framebuffer, el screenbuffer, es el buffer que se procesa en la salida de la tarjeta de video . Los buffers restantes se conocen como backbuffers. Cada vez que se muestra un nuevo fotograma , el primer backbuffer de la cadena de intercambio ocupa el lugar del screenbuffer, esto se denomina presentación o intercambio . Se pueden realizar una variedad de otras acciones en el buffer de pantalla anterior y otros buffers de retroceso (si existen). El búfer de pantalla 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, luego todos los búfer de respaldo existentes se copian hacia adelante en la cadena. Cuando se configura la copia, cada backbuffer se copia hacia adelante, pero el screenbuffer no se ajusta al último buffer, dejándolo sin cambios. Voltear no funciona cuando solo hay un backbuffer, ya que el screenbuffer se copia sobre el único backbuffer antes de poder presentarse. En el modo de descarte, el conductor selecciona el mejor método. [2]
Fuera del contexto de Direct3D, el almacenamiento en búfer triple se refiere a la técnica de permitir que una aplicación recurra al búfer posterior que se haya actualizado menos recientemente. Esto permite que la aplicación continúe siempre con la renderización, independientemente del ritmo al que la aplicación dibuja los fotogramas o del ritmo al que se envían los fotogramas a la pantalla. El almacenamiento en búfer triple puede provocar que un fotograma se descarte sin mostrarse si dos o más fotogramas más nuevos se procesan por completo 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 dibujado por la aplicación se mostrará incluso si hay fotogramas más nuevos disponibles. Direct3D no implementa una estrategia de intercambio de búfer más reciente, y la documentación de Microsoft llama a una cadena de intercambio de Direct3D de tres búferes "triple almacenamiento en búfer". El almacenamiento en búfer triple, como se describe anteriormente, es superior para fines interactivos, como juegos, pero las cadenas de intercambio Direct3D de más de tres búferes pueden ser mejores para tareas como presentar cuadros de un video donde el tiempo necesario para decodificar cada cuadro puede ser muy variable. [3]