Поделиться через


Передний, задний и другие буферы

OpenGL хранит пиксельные данные в framebuffer и управляет ими. Framebuffer состоит из набора логических буферов: буферов цвета, глубины, накопления и трафаретов. Сам буфер цвета состоит из набора логических буферов; этот набор может включать в себя передний левый, правый, левый, правый и задний, а также некоторое количество вспомогательных буферов. Конкретный формат пикселей или реализация OpenGL могут не предоставлять все эти буферы. Например, текущая версия реализации OpenGL корпорации Майкрософт в Windows не поддерживает стереоскопические изображения, поэтому формат пикселей не может иметь буферы цвета слева и справа. Кроме того, текущая версия не поддерживает вспомогательные буферы. Дополнительные сведения о буферах OpenGL и функциях OpenGL, которые работают с ними, см. в справочнике по OpenGL и Руководстве по программированию OpenGL.

Реализация OpenGL корпорацией Майкрософт в Windows поддерживает двойную буферизацию изображений. Это метод, при котором приложение рисует пиксели в буфер вне экрана, а затем, когда изображение готово к отображению, копирует содержимое внеэкранного буфера в экранный буфер. Двойная буферизация позволяет плавно изменять изображения, что особенно важно для анимированных изображений.

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

Универсальная реализация использует аппаратно-независимое растровое изображение (DIB) в качестве заднего буфера и экранный дисплей в качестве переднего буфера. Аппаратные устройства и их драйверы могут использовать разные подходы.

Двойная буферизация — это свойство формата пикселей. Чтобы запросить двойную буферизацию для формата пикселей, установите флаг PFD_DOUBLEBUFFER в структуре данных PIXELFORMATDESCRIPTOR в вызове метода ChoosePixelFormat.

Основная функция OpenGL glDrawBuffer выбирает буферы для записи и очистки.

Функции буфера