Partager via


Enregistrement et restauration des ensembles de variables d’état

Vous pouvez enregistrer et restaurer les valeurs d’une collection de variables d’état sur une pile d’attributs avec les fonctions glPushAttrib et glPopAttrib. La pile d’attributs a une profondeur d’au moins 16. Pour obtenir la profondeur réelle, utilisez GL_MAX_ATTRIB_STACK_DEPTH avec glGetIntegerv. L’envoi (push) d’une pile complète ou l’apparition d’une pile vide génère une erreur.

Il est généralement plus rapide d’utiliser glPushAttrib et glPopAttrib que d’obtenir et de restaurer les valeurs soi-même. Certaines valeurs peuvent être envoyées et dépilées dans le matériel, et l’enregistrement et la restauration de ces valeurs peuvent être gourmandes en ressources. En outre, si vous travaillez sur un client distant, toutes les données d’attributs doivent être transférées à travers la connexion réseau et revenir au fur et à mesure qu’elles sont sauvegardées et restaurées. Toutefois, votre implémentation OpenGL conserve la pile d’attributs sur le serveur, ce qui évite les retards réseau inutiles.

Le prototype de glPushAttrib est :

void glPushAttrib(GLbitfield mask ) ;

L’utilisation de glPushAttrib enregistre tous les attributs indiqués par des bits dans mask en les envoyant sur la pile d’attributs. Pour obtenir une liste des bits de masque possibles que vous pouvez logiquement OU ensemble pour sauvegarder n’importe quelle combinaison d’attributs, voir Groupes d’attributs. Chaque bit correspond à une collection de variables d’état individuelles. Par exemple, GL_LIGHTING_BIT fait référence à toutes les variables d’état liées à l’éclairage, qui incluent la couleur de matériau actuelle ; la lumière ambiante, diffuse, spéculaire et émise ; une liste des lumières activées ; et les directions des projecteurs. Lorsque vous appelez glPopAttrib, toutes ces variables sont restaurées. Pour savoir exactement quels attributs sont enregistrés pour des valeurs de masque particulières, consultez Variables d’état OpenGL.