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


Сохранение и восстановление наборов переменных состояния

Можно сохранить и восстановить значения коллекции переменных состояния в стеке атрибутов с помощью функций glPushAttrib и glPopAttrib. Стек атрибутов имеет не менее 16 глубин. Чтобы получить фактическую глубину, используйте GL_MAX_ATTRIB_STACK_DEPTH с glGetIntegerv. Отправка полного стека или всплывание пустого создает ошибку.

Как правило, быстрее использовать glPushAttrib и glPopAttrib, чем получить и восстановить значения самостоятельно. Некоторые значения могут быть отправлены и вырваны в оборудовании, а сохранение и восстановление их могут быть ресурсоемкими. Кроме того, если вы работаете с удаленным клиентом, все данные атрибута должны быть переданы через сетевое подключение и обратно при сохранении и восстановлении. Однако реализация OpenGL сохраняет стек атрибутов на сервере, избегая ненужных задержек сети.

Прототип glPushAttrib :

void glPushAttrib(маска GLbitfield);

Использование glPushAttrib сохраняет все атрибуты, указанные битами в маске , принудив их к стеку атрибутов. Список возможных битов маски можно логически или совместно сохранить любое сочетание атрибутов, см. в разделе "Группы атрибутов". Каждый бит соответствует коллекции отдельных переменных состояния. Например, GL_LIGHTING_BIT относится ко всем переменным состояния, связанным с освещением, которые включают текущий цвет материала; окружающая, диффузная, зеркальная и излучаемая свет; список включенных огней; и направления в центре внимания. При вызове glPopAttrib все эти переменные восстанавливаются. Сведения о том, какие атрибуты сохраняются для определенных значений маски, см. в разделе "Переменные состояния OpenGL".