двойной буфер что это

Категории Все вопросы проекта Компьютеры, Интернет Темы для взрослых Авто, Мото Красота и Здоровье Товары и Услуги Бизнес, Финансы Наука, Техника, Языки Философия, Непознанное Города и Страны Образование Фотография, Видеосъемка Гороскопы, Магия, Гадания Общество, Политика, СМИ Юридическая консультация Досуг, Развлечения Путешествия, Туризм Юмор Еда, Кулинария Работа, Карьера О проектах Mail.Ru Животные, Растения Семья, Дом, Дети Другое Знакомства, Любовь, Отношения Спорт Золотой фонд Искусство и Культура Стиль, Мода, Звезды Полный список Спросить Лидеры Поиск по вопросам
Вертика́льная синхрониза́ция (англ. V-Sync) — синхронизация кадровой частоты в компьютерной игре с частотой вертикальной развёртки монитора. При этом максимальный FPS с вертикальной синхронизанией приравнивается к частоте обновления монитора. Если FPS ниже частоты обновления монитора, то во избежание ещё большей потери производительности следует включить тройную буферизацию.
Тройная буферизация в компьютерной графике — разновидность двойной буферизации; метод вывода изображения, позволяющий избежать или уменьшить количество артефактов.

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

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

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

двойной буфер winapi

Дело в том, что в случае с обычной, так называемой "двойной буферизацией", кадры на монитор поступают из первичного кадрового буфера (front buffer)

Читать

двойной буфер обмена

Процесс добавления двойной буферизации в виджет не очень сложен.  где source -- это виджет-источник (в нашем случае -- буфер с картинкой), dest -- виджет-приемник