Sur cette page

QAbstractOpenGLFunctions Class

La classe `QAbstractOpenGLFunctions` est la classe de base d'une famille de classes qui exposent toutes les fonctions pour chaque version et chaque profil OpenGL. En savoir plus...

Fonctions publiques

QAbstractOpenGLFunctions(const QAbstractOpenGLFunctions &)
virtual ~QAbstractOpenGLFunctions()
QAbstractOpenGLFunctions &operator=(const QAbstractOpenGLFunctions &)

Fonctions protégées

Description détaillée

Les implémentations OpenGL sur différentes plateformes peuvent être liées à un nombre variable de fonctions OpenGL, en fonction de l’ABI OpenGL de la plateforme concernée. Par exemple, sous Microsoft Windows, seules les fonctions allant jusqu’à celles d’OpenGL 1.1 peuvent être liées lors de la compilation. Toutes les autres fonctions doivent être résolues lors de l’exécution. La solution traditionnelle à ce problème consistait à utiliser soit ` QOpenGLContext::getProcAddress()`, soit ` QOpenGLFunctions`. La première méthode est fastidieuse et source d’erreurs, car elle implique de manipuler directement des pointeurs de fonction. La seconde n’expose que les fonctions communes à OpenGL ES 2 et à OpenGL pour ordinateurs de bureau. Il existe cependant de nombreuses nouvelles fonctionnalités OpenGL qui s’avèrent utiles lors de l’écriture d’applications OpenGL concrètes.

Qt fournit désormais une famille de classes qui héritent toutes de `QAbstractOpenGLFunctions` et qui exposent chaque fonction OpenGL de base via une fonction membre correspondante. Il existe une classe pour chaque combinaison valide de version et de profil OpenGL. Chaque classe respecte la convention de nommage suivante :

QOpenGLFunctions_<MAJOR VERSION>_<MINOR VERSION>[_PROFILE]

Pour les versions d’OpenGL 1.0 à 3.0, il n’y a pas de profils, ce qui donne les classes suivantes :

où chaque classe hérite de QAbstractOpenGLFunctions.

La version 3.1 d’OpenGL a supprimé de nombreuses fonctions obsolètes, ce qui a permis d’obtenir une API beaucoup plus simple et générique.

Avec OpenGL 3.2, le concept de profils a été introduit. Deux profils sont actuellement définis pour OpenGL : Core et Compatibility.

Le profil Core n’inclut aucune des fonctions supprimées dans OpenGL 3.1. Le profil « Compatibility » contient toutes les fonctions du profil « Core » de la même version, ainsi que toutes les fonctions supprimées dans OpenGL 3.1. Ainsi, les classes du profil « Compatibility » permettent d’utiliser les nouvelles fonctionnalités d’OpenGL tout en continuant à exploiter votre code OpenGL existant. Pour tout nouveau code OpenGL, il est recommandé de privilégier le profil « Core ».

Veuillez noter que certains éditeurs, notamment Apple, n’implémentent pas le profil « Compatibility ». Par conséquent, si vous souhaitez cibler les nouvelles fonctionnalités OpenGL sous macOS, vous devez vous assurer de demander un contexte de profil « Core » via ` QSurfaceFormat::setProfile()`.

Qt fournit des classes pour toutes les combinaisons de versions et de profils « Core » et « Compatibility ». Les classes pour les versions d’OpenGL 3.1 à 4.3 sont :

où chaque classe hérite de `QAbstractOpenGLFunctions`.

Un pointeur vers un objet de la classe correspondant à la version et au profil d’OpenGL utilisés peut être obtenu via ` QOpenGLVersionFunctionsFactory::get()`. Si l’objet est obtenu de cette manière, notez que l’ QOpenGLContext e conserve la propriété de l’objet. Cela permet de mettre l’instance en cache et de la partager.

Avant d’appeler l’une des fonctions OpenGL exposées, vous devez vous assurer que l’objet a résolu les pointeurs de fonction vers les fonctions OpenGL. Cette opération ne doit être effectuée qu’une seule fois par instance à l’aide de la fonction initializeOpenGLFunctions(). Une fois initialisé, l’objet peut être utilisé pour appeler n’importe quelle fonction OpenGL correspondant à la version et au profil en question. Notez que la fonction `initializeOpenGLFunctions()` peut échouer dans certaines circonstances ; vérifiez donc sa valeur de retour. L’initialisation peut notamment échouer si vous disposez d’un objet de fonctions pour une version ou un profil contenant des fonctions qui ne font pas partie du contexte utilisé pour résoudre les pointeurs de fonction.

Si vous utilisez exclusivement des objets de fonctions, vous obtiendrez des erreurs de compilation si vous tentez d’utiliser une fonction non incluse dans cette version et ce profil. Cela est évidemment beaucoup plus facile à déboguer qu’un comportement indéfini lors de l’exécution.

Voir également QOpenGLVersionFunctionsFactory::get().

Documentation sur les fonctions membres

[protected] QAbstractOpenGLFunctions::QAbstractOpenGLFunctions()

Crée un objet de type QAbstractOpenGLFunctions.

[delete] QAbstractOpenGLFunctions::QAbstractOpenGLFunctions(const QAbstractOpenGLFunctions &)

Copie et construit une instance de ` QAbstractOpenGLFunctions`. Cette fonction est supprimée.

[virtual noexcept] QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions()

Supprime un objet de type « QAbstractOpenGLFunctions ».

[delete] QAbstractOpenGLFunctions &QAbstractOpenGLFunctions::operator=(const QAbstractOpenGLFunctions &)

Copie et attribue l’ other à cette instance QAbstractOpenGLFunctions. Cette fonction est supprimée.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.