OpenGL

Les états

OpenGL est une machine d'état

Un "état", pour OpenGL, est une variable, un paramètre, un mode, dont il est possible d'activer, de désactiver, ou de configurer. La fonctionnalité d'anti-aliasing est un état que nous pouvons activer. La couleur courante est un état que nous pouvons changer. Les effets de lumières sont des états que nous pouvons activer ou désactiver à tout moment, et qui sont paramétrables.

OpenGL est une machine d'état. L'API regroupe un nombre important de fonctionnalités pour éditer un état, et des constantes pour représenter un état (exemple: GL_BLEND est un état qui gère l'opacité des entités géométriques). Ces états peuvent être édités à volonté, à n'importe quel moment, et restent en vigueur jusqu'à une nouvelle modification. Lorsque nous définissons la couleur courante sur le rouge (méthode glColor3f()), toutes les formes géométriques seront dessinés en rouge jusqu'à un nouveau changement de la couleur courante. Chaque variable d'état a une valeur par défaut.


La majorité des états n'ont qu'un rôle booléenne ("On/Off"), et sont représentées par des constantes d'OpenGL. Ils sont souvent renommés en tant que "mode". Les deux méthodes qui ont pour rôle d'activer ou de désactiver ces modes sont glEnable() et glDisable().
En ajout, il est possible d'interroger le système sur un état et de récupérer sa valeur courante :

Certains états ont leurs propres méthodes, leurs propres configurations (exemples: la gestion des couleurs, des buffers, des lumières...). D'un autre côté, certaines fonctionnalités ne concernent que le client (côté applicatif) ou le serveur (côté matériel).
Finalement, les méthodes glPushAttrib() et glPopAttrib() servent à stocker et déstocker une collection de variable d'états. Ces méthodes sont très utiles pour sauvegarder une configuration avant de modifier certains états pour un traitement spécifique, et reprendre la précédente configuration.


Ce concept est très efficace et simple à utiliser. Cependant, elle peut encourager les effets de bords.
Ainsi, il est conseillé de réinitialiser les états avant chaque rendu de scène, afin d'éviter ces erreurs fréquents.