Salvando e restaurando conjuntos de variáveis de estado
Você pode salvar e restaurar os valores de uma coleção de variáveis de estado em uma pilha de atributos com as funções glPushAttrib e glPopAttrib. A pilha de atributos tem uma profundidade de pelo menos 16. Para obter a profundidade real, use GL_MAX_ATTRIB_STACK_DEPTH com glGetIntegerv. Empurrar uma pilha cheia ou abrir uma pilha vazia gera um erro.
Geralmente é mais rápido de usar glPushAttrib e glPopAttrib do que obter e restaurar os valores você mesmo. Alguns valores podem ser enviados e exibidos no hardware, e salvá-los e restaurá-los pode consumir muitos recursos. Além disso, se você estiver operando em um cliente remoto, todos os dados de atributos deverão ser transferidos através da conexão de rede e de volta à medida que forem salvos e restaurados. Entretanto, sua implementação OpenGL mantém a pilha de atributos no servidor, evitando atrasos desnecessários na rede.
O protótipo de glPushAttrib é:
void glPushAttrib(GLbitfield mask );
O uso de glPushAttrib salva todos os atributos indicados por bits em máscara empurrando-os para a pilha de atributos. Para obter uma lista dos possíveis bits de máscara que você pode usar logicamente OU em conjunto para salvar qualquer combinação de atributos, consulte Grupos de atributos. Cada bit corresponde a uma coleção de variáveis de estado individuais. Por exemplo, GL_LIGHTING_BIT refere-se a todas as variáveis de estado relacionadas à iluminação, que incluem a cor atual do material; a luz ambiente, difusa, especular e emitida; uma lista das luzes que estão habilitadas; e as direções dos holofotes. Quando você chama glPopAttrib, todas essas variáveis são restauradas. Para descobrir exatamente quais atributos são salvos para valores de máscara específicos, consulte Variáveis de estado OpenGL.