Двойная буферизация
Двойная буферизация — в информатике метод подготовки данных, обеспечивающий возможность отдачи готового результата без прерывания процесса подготовки следующего результата.
Основные области применения двойной буферизации:
- отрисовка содержимого экрана
- воспроизведение смешанного звука от нескольких источников
Описание
При использовании двойной буферизации вывод информации осуществляется во вторичный буфер, а чтение информации для отдачи «наружу» — из первичного.
В тот момент, когда завершается процесс чтения, при условии, что процесс обработки данных завершён, буферы меняются названиями (технически это осуществляется обменом значений указателей на буферы), и вывод данных начинает осуществляться из «нового» первичного буфера (бывший вторичный), а результаты обработки помещаются в «новый» вторичный.
В случае, если обработка данных не завершена к моменту завершения вывода информации из первичного буфера, процесс вывода либо задерживается до момента завершения обработки, либо осуществляется повторный вывод первичного буфера (например, так поступают при создании изображения на экране).
Имеет смысл только в случае, когда есть аппаратное переключение изображаемого на экране буфера, не требующее копирования всех данных.
Проблема, которую решает двойная буферизация, выглядит так: все видеоадаптеры, кроме совсем устаревших (CGA), позволяют процессору писать в видеопамять только на обратных ходах кадровой развертки, во избежание появления артефактов. Если алгоритм отрисовки очередного кадра сложен, то на него может не хватить обратного хода. Потому зачастую в играх использовалась отрисовка всего экрана на «экран в памяти», что могло делаться вне обратных ходов, с последующим копированием всего этого экрана (64000 байт для стандартного режима VGA) в видеопамять на обратном ходе.
Однако такое копирование может само «не уместиться» в обратный ход развертки. В этом случае спасает двойная буферизация, то есть аппаратное переключение картинки на новый буфер вместо копирования.