OpenGL
— автомат с конечным числом состояний
OpenGL работает
по принципу конечного автомата, то есть автомата, который в каждый момент времени
находится в одном из состояний, принадлежащих конечному множеству допустимых
значений. В документации вы можете встретить в применении к OpenGL термины state
machine (конечный автомат) и assembly line (конвейер). Некоторые команды (вызовы
функций OpenGL) переводят автомат в различные состояния или режимы, которые
остаются неизменными до тех пор, пока не придет следующая команда изменения
состояния. Текущий цвет, как вы видели, является одним из состояний. Другими
состояниями являются:
- узор линий или полигонов
(stipple patterns);
- тип проективных или обзорных
преобразований (projection and viewing transformations);
- режимы рисования полигонов;
- режимы упаковки пикселов;
- расположение источников
света и свойства материалов.
Многие переменные,
определяющие состояния, переключаются с помощью функций glEnable (включить)
или gioisable (выключить). Каждая переменная состояния или режим имеет значение
по умолчанию, и в любой точке программы вы можете узнать текущее состояние.
Обычно для этой цели используется одна из 6-ТИ команд: glGetBooleanv, glGetDoublev,
glGetFloatv, glGetlntegerv, glGetPointerv или glisEnabled. Выбор зависит от
типа данных, которые задают состояние. Некоторые переменные состояния (state
variables) заполняются более специфичными командами, например: glGetLight*,
glGetError, glGetPolygonStipple. Множество состояний можно сохранить в стеке
атрибутов командами glPushAttrib или glPushClientAttrib. Обычно так делают для
того, чтобы временно изменить что-то, а затем восстановить состояния с помощью
одной из команд: glPopAttrib, glPopClientAttrib.