QOpenGLTimerQuery Class
La classe `QOpenGLTimerQuery` encapsule un objet de requête de minuterie OpenGL. En savoir plus...
| En-tête : | #include <QOpenGLTimerQuery> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS OpenGL) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
| qmake : | QT += opengl |
| Hérite de : | QObject |
- Liste de tous les membres, y compris les membres hérités
- QOpenGLTimerQuery fait partie du module « Rendu 3D ».
Fonctions publiques
| QOpenGLTimerQuery(QObject *parent = nullptr) | |
| virtual | ~QOpenGLTimerQuery() |
| void | begin() |
| bool | create() |
| void | destroy() |
| void | end() |
| bool | isCreated() const |
| bool | isResultAvailable() const |
| GLuint | objectId() const |
| void | recordTimestamp() |
| GLuint64 | waitForResult() const |
| GLuint64 | waitForTimestamp() const |
Description détaillée
Les objets de requête de temporisateur OpenGL sont des ressources gérées par OpenGL permettant de mesurer les temps d'exécution de séquences de commandes OpenGL sur le GPU.
OpenGL offre différents niveaux de prise en charge des requêtes de temporisation, en fonction de la version d’OpenGL dont vous disposez et de la présence des extensions ARB_timer_query ou EXT_timer_query. La prise en charge peut être résumée comme suit :
- OpenGL >= 3.3 offre une prise en charge complète de toutes les fonctionnalités de requête de temporisation.
- OpenGL 3.2 avec l'extension ARB_timer_query offre une prise en charge complète de toutes les fonctionnalités de requête de temporisation.
- Qt OpenGL <= 3.2 avec l’extension EXT_timer_query offre une prise en charge limitée, dans la mesure où l’horodatage du GPU ne peut pas être interrogé. Les cas où cela a un impact sur les fonctions fournies par les classes Qt seront mis en évidence dans la documentation des fonctions.
- OpenGL ES 2 (et OpenGL ES 3) ne prennent pas en charge les requêtes de temporisation OpenGL.
OpenGL représente le temps avec une granularité de 1 nanoseconde (1e-9 seconde). Par conséquent, des entiers 32 bits ne permettraient d’atteindre qu’une durée totale d’environ 4 secondes, ce qui ne serait pas difficile à dépasser lors d’opérations longues ou peu performantes. OpenGL utilise donc des entiers de 64 bits pour représenter le temps. Une variable GLuint64 dispose d’une largeur suffisante pour contenir une durée de plusieurs centaines d’années, ce qui est largement suffisant pour les besoins du rendu en temps réel.
Comme pour les autres classes de l’ Qt OpenGL, QOpenGLTimerQuery dispose d’une fonction create() permettant de créer l’objet OpenGL sous-jacent. Cela permet au développeur de s’assurer qu’un contexte OpenGL valide est bien présent à ce moment-là.
Une fois la classe créée, les requêtes de temporisation peuvent être émises de plusieurs façons. La méthode la plus simple consiste à délimiter un bloc de commandes par des appels à ` begin()` et ` end()`. Cela demande à OpenGL de mesurer le temps écoulé entre la fin de l’exécution de toutes les commandes émises avant ` begin()` et la fin de l’exécution de toutes les commandes émises avant ` end()`.
À la fin d’une image, nous pouvons récupérer les résultats en appelant la fonction waitForResult(). Comme son nom l’indique, cette fonction bloque l’exécution du processeur jusqu’à ce qu’OpenGL signale que le résultat de la requête de chronométrage est disponible. Pour éviter ce blocage, vous pouvez vérifier si le résultat de la requête est disponible en appelant la fonction isResultAvailable(). Notez que les GPU modernes sont dotés d’un pipeline profond et que les résultats des requêtes peuvent ne pas être disponibles avant 1 à 5 images après leur émission.
Notez qu’OpenGL n’autorise pas l’imbrication ou l’entrelacement de plusieurs requêtes de temporisation à l’aide de ` begin()` et ` end()`. L’utilisation de plusieurs requêtes de temporisation et de ` recordTimestamp()` permet de contourner cette limitation. Lorsque vous utilisez ` recordTimestamp()`, le résultat peut être obtenu ultérieurement à l’aide de ` isResultAvailable()` et ` waitForResult()`. Qt fournit la classe de commodité ` QOpenGLTimeMonitor ` qui facilite l’utilisation de plusieurs objets de requête.
Voir également QOpenGLTimeMonitor.
Documentation sur les fonctions membres
[explicit] QOpenGLTimerQuery::QOpenGLTimerQuery(QObject *parent = nullptr)
Crée une instance de `QOpenGLTimerQuery` avec l'parent` spécifiée. Vous devez appeler la fonction ` create()` avec un contexte OpenGL valide avant de l'utiliser.
[virtual noexcept] QOpenGLTimerQuery::~QOpenGLTimerQuery()
Supprime l'QOpenGLTimerQuery e et la ressource OpenGL sous-jacente.
void QOpenGLTimerQuery::begin()
Marque le point de départ dans la file d'attente des commandes OpenGL d'une séquence de commandes dont la synchronisation doit être gérée par cet objet de requête.
Cette fonction est utile pour des cas d'utilisation simples. En général, il est préférable d'utiliser ` recordTimestamp()`.
Voir également end(), isResultAvailable(), waitForResult() et recordTimestamp().
bool QOpenGLTimerQuery::create()
Crée l'objet de requête de temporisateur OpenGL sous-jacent. Pour que cette fonction aboutisse, un contexte OpenGL valide prenant en charge les objets de requête doit être actif.
Renvoie « true » si l'objet de requête de minuterie OpenGL a été créé avec succès.
void QOpenGLTimerQuery::destroy()
Détruit l'objet de requête de temporisateur OpenGL sous-jacent. Le contexte qui était actif lors de l'appel de la fonction create() doit être actif lors de l'appel de cette fonction.
void QOpenGLTimerQuery::end()
Marque le point final dans la file d'attente des commandes OpenGL pour une séquence de commandes dont la durée doit être mesurée par cet objet de requête.
Cette fonction est utile pour des cas d'utilisation simples. En général, il est préférable d'utiliser ` recordTimestamp()`.
Voir également begin(), isResultAvailable(), waitForResult() et recordTimestamp().
bool QOpenGLTimerQuery::isCreated() const
Renvoie ` true ` si l'objet de requête OpenGL sous-jacent a été créé. Si cette fonction renvoie ` true ` et que le contexte OpenGL associé est actif, vous pouvez alors envoyer des requêtes à l'aide de cet objet.
bool QOpenGLTimerQuery::isResultAvailable() const
Renvoie ` true ` si le résultat de la requête de temporisation OpenGL est disponible.
Cette fonction est non bloquante et devrait idéalement être utilisée pour vérifier la disponibilité du résultat de la requête avant d'appeler waitForResult().
Voir également waitForResult().
GLuint QOpenGLTimerQuery::objectId() const
Renvoie l'identifiant de l'objet de requête OpenGL sous-jacent.
void QOpenGLTimerQuery::recordTimestamp()
Place un marqueur dans la file d'attente des commandes OpenGL afin que le GPU enregistre l'horodatage lorsque ce marqueur est atteint par le GPU. Cette fonction est non bloquante et le résultat sera disponible ultérieurement.
La disponibilité du résultat peut être vérifiée à l'aide de ` isResultAvailable()`. Le résultat peut être récupéré à l'aide de ` waitForResult()`, qui bloquera l'exécution si le résultat n'est pas encore disponible.
Voir également waitForResult(), isResultAvailable(), begin() et end().
GLuint64 QOpenGLTimerQuery::waitForResult() const
Renvoie le résultat de l'interrogation du minuteur OpenGL.
Cette fonction se met en attente jusqu’à ce que le résultat soit mis à disposition par OpenGL. Il est recommandé d’appeler la fonction ` isResultAvailable()` pour s’assurer que le résultat est disponible, afin d’éviter tout blocage ou ralentissement inutile.
Voir également isResultAvailable().
GLuint64 QOpenGLTimerQuery::waitForTimestamp() const
Renvoie l'horodatage actuel du GPU lorsque toutes les commandes OpenGL émises précédemment ont été reçues par le GPU, mais n'ont pas nécessairement été exécutées par celui-ci.
Cette fonction reste bloquée jusqu’à ce que le résultat soit renvoyé.
Voir également recordTimestamp().
© 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.