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 :
- isEnabled(): Détermine si un état (ou une mode) est activé ou non.
- glGet(): Pour récupérer la valeur courante d'un état ou d'un paramètre. Il existe plusieurs méthodes alternatives, pour récupérer un type de valeur précis : glGetBooleanv(), glGetDoublev(), ...
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.