OpenGL поддерживает работу не только отдельного конвейера обработки пикселей, но и множество отдельных буферов, предоставляя в распоряжение программиста операции пере394 Глава 9. Операции с изображением на уровне растрового представления сылки данных между этими буферами и между буферами и памятью процессора. Вид информации, которую можно хранить в том или ином буфере - от индексов основных цветовых компонентов до данных о глубине, - зависит от типа буфера. Кроме того, программист может обращаться и к основной памяти процессора, используя стандартные типы переменных - байты, целые числа или вещественные числа в формате с плавающей точкой. Такое разнообразие форматов имеет и обратную сторону- оно подчас затрудняет выбор самого эффективного способа организации данных при создании сложных приложений. В этой книге мы не будем обсуждать все нюансы, а ограничимся кратким обзором тех функциональных возможностей, которые предоставляются программисту при работе с OpenGL.
9.6.1. Буферы OpenGL
Графическая система OpenGL поддерживает работу со следующими буферами:
буферы цвета;
буфер глубины;
буфер-накопитель (аккумулятор);
буфер маски.
Группа буферов цвета включает буфер кадра, но, как мы уже говорили при обсуждении методики двойной буферизации в главе 3, таких буферов может быть несколько. При использовании двойной буферизации обычно говорят о рабочем {front) и фоновом (back) буферах. В приложении можно сформировать и стереопару, для чего используется буфер правого и левого изображений стереопары, т.е. изображения, которое видимо правым или левым глазом. Как правило, в одном из буферов цвета программа создает образы геометрических объектов, но программист может и напрямую обращаться к некоторому пикселю в буфере, считывать его текущее значение или записывать в него определенный код цвета. Только информация из буферов цвета может появиться на экране.
Буфер глубины обычно используется при реализации алгоритмов удаления невидимых поверхностей, но к нему также можно обращаться непосредственно и считывать/записывать данные. В разделе 9.8 будет показано, как при выполнении различных операций можно использовать буфер-накопитель (аккумулятор). Буфер маски используется для формирования масок, "вырезающих" из общего массива те пиксели, которые следует вывести на экран.