Все эти операции не зависят от других и могут быть эффективно и дешево выполнены с использованием аппаратного обеспечения. Некоторые из них подразумевают обращение к буферу кадров за значениями цвета, глубины или шаблона. Несмотря на названное этим замедление работы, на современных графических ускорителях все операции последнего этапа визуализации могут выполняться со скоростью миллион пикселов в секунду.
1.7.8. Операции с буфером кадров Операции с буфером кадров контролируют буфер в целом (см. рис. 1.1, 9). Посредством выбора состояний OpenGL можно влиять на ту часть буфера кадров, в которую будут нарисованы примитивы. Буфер назначения рендеринга обычно надо выбирать, так как OpenGL работает и со стереоизображениями, и с двойной буферизацией. Части буфера кадров также называются буферами: первичный, вторичный, левый, правый, первичный левый, первичный правый, вторичный левый,
Обзор OpenGL
вторичный правый и первично-вторичный. Рендеринг можно перенаправить в любой из этих буферов с помощью функции glDrawBuffer. Некоторые части внутри буфера или буферов можно защищать от записи.
Режим записи или чтения различных компонентов буфера назначения - красного, зеленого, синего, уровня прозрачности - устанавливается функцией g] Col orMask. Разрешить или запретить запись глубины позволяет функция glDepthMask. Изменять режим записи в буфер шаблона можно функцией gl Stencil Mask. Можно также очистить (инициализировать заново) все основные значения в буфере кадров, вызвав функцию gl CI ear. Отдельные компоненты - цвет, глубина, шаблон, буфер накопления - инициализируются соответствующими функциями: glClearColor, glClearDepth, glClearStenci 1 и glClearAccum. Затем функцией glAccumустанавливается операция накопительного буфера.
Из соображений улучшения производительности реализации OpenGL прибегают к различным способам буферизации для того, чтобы отправлять на аппаратную обработку группы графических примитивов большего размера. Чтобы ускорить завершение рисования графических примитивов для конкретного контекста рендеринга, приложение должно вызвать функцию gl Flush. Чтобы удостовериться в том, что рендеринг завершен для всех примитивов контекста, приложение вызывает функцию gl Fi ni sr. Эта команда блокирует дальнейшую работу и ожидает окончания выполнения всех предыдущих команд. При этом страдает скорость работы в целом, так что использовать эти функции необходимо осторожно.