Некоторые дополнительные операции, проводимые на этом этапе, являются необязательной частью формирования изображения. Производители графических ускорителей, считающие эти операции важными, по желанию могут включать набор дополнительных операций над изображением (imaging subset) в собственные реализации OpenGL, но другие производители могут и не поддерживать эти операции. Приложение может определить доступность дополнительной операции с помощью функции gl GetSt ri ng, передавая ей параметр GL_EXTENSIONS. Функция вернет список расширений, поддерживаемых данной реализацией. Приложение должно проверить вхождение подстроки «ARB_i magi ng» в возвращенную функцией строку.
В набор дополнительных операций перемещения пикселов входят искривление, матрица линейного преобразования, гистограмма, вычисление минимума и максимума, дополнительные таблицы преобразования цвета. Все это может быть использовано для более полной обработки изображений и операций корректирования цвета.
1.8.3. Растеризация и окончательная обработка
После перемещения пикселов фрагменты проходят растеризацию пиксельных прямоугольников примерно таким же способом, как они были сгенерированы из ЗБ-примитивов (см. рис. 1.1, 14). На этом этапе определяется, как изображение будет размещено в буфере кадров. Растеризация учитывает текущее положение растра (которое можно установить функциями glRasterPos или glWindowPos)
и текущий масштаб (устанавливаемый gl Pixel Zoom и влияющий на увеличение или уменьшение рисуемой картинки).
После растеризации фрагменты из пиксельных прямоугольников подвергаются тем же самым операциям, что и графические примитивы (см. рис. 1.1, 6), и потом проходят тот же самый путь, что и графические примитивы, пока пикселы не будут окончательно размещены в буфере кадров (см. рис. 1.1,5-10).
Если значения пикселов задаются функциями gl Texlmage или gl TexSub Image, они не проходят растеризацию и дальнейшую обработку, а непосредственно записываются в указанную часть текстурной памяти (см. рис. 1.1, 15).
1.8.4. Проверка чтения
Функция gl ReadPixel s читает прямоугольные области из буфера кадров и возвращает их приложению. Чтобы просто скопировать их внутри буфера кадров из одной области в другую, используется фун кция gl Copy Pi xel s. Для копирования из буфера кадров в текстурную память применяются функции glCopyTexImage и glCopyTex-Sublmage. Во всех перечисленных случаях та часть кадрового буфера, что будет прочитана, контролируется этапом проверка чтения OpenGL и устанавливается командой gl ReadBuffer (см. рис. 1.1, 16).
Прочитанные из буфера значения могут проходить этап перемещения пикселов и подвергаться различным операциям обработки изображений.
Полученные после обработки пикселы в процессе копирования записываются в текстурную память или обратно в буфер кадров н зависимости от использованной команды. Если же выполняется операция чтения, пиксел ы проходят еще и этап упаковки пикселов (см. рис. 1.1, 17). Это операция, противоположная распаковке пикселов (см. рис. 1.1, 12). Существует несколько параметров, указывающих, как данные изображения будут храниться в памяти (длина каждой строки пикселов, количество пропущенных строк сверху, количество пропущенных пикселов слева). Эти параметры задаются функцией gl Pixel Store. Все это дает приложению возможность выбрать, в каком формате OpenGL вернет ему данные изображения, прочитанные из буфера кадров.