Тройная буферизация

Тройная буферизация в компьютерной графике — разновидность двойной буферизации; метод вывода изображения, позволяющий избежать или уменьшить количество артефактов.

Тройная буферизация позволяет увеличить скорость вывода изображения по сравнению с двойной буферизацией. В реальных приложениях это часто связано с попыткой абстрагировать операции формирования графики от синхронизации с частотой обновления монитора. Как правило, кадры рисуются с частотой ниже или выше частоты обновления экрана (с переменной частотой кадров) без обычных эффектов, которые это могло вызвать (а именно: мерцание, сдвиги, разрывы). Так как программе не требуется опрашивать оборудование для получения событий обновления экрана, алгоритм может свободно выполняться максимально быстро. Это не единственный доступный метод буферизации, но преобладающий на архитектуре ПК, где скорость машины может сильно различаться.

Другой метод тройной буферизации включает в себя синхронизацию с частотой обновления экрана, используя третий буфер просто как способ предоставить свободное пространство для запросов на изменения в общем объёме выводимой графики. Здесь буфер используется в истинном смысле, когда он действует как хранилище. Такой метод предъявляет повышенные минимальные требования к аппаратному обеспечению, но обеспечивает согласованную (по сравнению с переменной) частоту кадров.

Тройная буферизация предполагает использование трёх буферов, но метод может быть расширен на любое нужное приложению количество буферов. Обычно использование четырёх и более буферов не даёт каких-либо преимуществ.

Недостатки двойной буферизации

править

Если в системе есть два буфера, А и Б, она может отображать буфер Б, одновременно формируя новое изображение в буфере А. Когда изображение в буфере А готово, системе приходится ждать обратного хода луча монитора, чтобы сменить буфера. Этот период ожидания может составить несколько миллисекунд, в течение которых ни один из буферов не затрагивается. В момент завершения вертикальной развёртки можно либо обменять буфера А и Б, чтобы затем начать построение изображения в буфере Б (переключение страниц), или скопировать буфер А в буфер Б и рисовать в буфере А.

Преимущества тройной буферизации

править

Если в системе есть три буфера: А, Б и В, ей не нужно ждать смены буферов. Она может отображать буфер Б, формируя изображение в буфере А. Когда изображение в буфере А готово, она немедленно начинает построение изображения в буфере В. При наступлении паузы в вертикальной развёртке отображается буфер А, а буфер Б освобождается для повторного использования.

Ограничения тройной буферизации

править

Если система всегда заполняет буфера за меньшее время, чем требуется для отображения буфера на экране, единственным преимуществом тройной буферизации над двойной становится меньшая средняя задержка вывода.