Sur cette page

QOpenGLTimerQuery Class

La classe QOpenGLTimerQuery contient un objet de requête de minuterie OpenGL. Plus d'informations...

En-tête : #include <QOpenGLTimerQuery>
CMake : find_package(Qt6 REQUIRED COMPONENTS OpenGL)
target_link_libraries(mytarget PRIVATE Qt6::OpenGL)
qmake : QT += opengl
Héritages : QObject

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 OpenGL timer query sont des ressources gérées par OpenGL pour mesurer les temps d'exécution des séquences de commandes OpenGL sur le GPU.

OpenGL offre différents niveaux de support pour les requêtes de temps, en fonction de la version d'OpenGL que vous avez et de la présence des extensions ARB_timer_query ou EXT_timer_query. Le support peut être résumé comme suit :

  • OpenGL >=3.3 offre un support complet pour toutes les fonctionnalités de requêtes temporelles.
  • OpenGL 3.2 avec l'extension ARB_timer_query offre un support complet pour toutes les fonctionnalités de requête de temporisation.
  • OpenGL <=3.2 avec l'extension EXT_timer_query offre un support limité dans la mesure où l'horodatage du GPU ne peut pas être interrogé. Les endroits où cela a un impact sur les fonctions fournies par les classes Qt seront mis en évidence dans la documentation de la fonction.
  • OpenGL ES 2 (et OpenGL ES 3) ne fournit aucun support pour les requêtes de temps OpenGL.

OpenGL représente le temps avec une granularité de 1 nanoseconde (1e-9 secondes). En conséquence, les entiers de 32 bits ne donneraient qu'une durée totale possible d'environ 4 secondes, qu'il ne serait pas difficile de dépasser lors d'opérations longues ou peu performantes. OpenGL utilise donc des entiers de 64 bits pour représenter les temps. Une variable GLuint64 est suffisamment large pour contenir une durée de plusieurs centaines d'années, ce qui est largement suffisant pour les besoins de rendu en temps réel.

Comme pour les autres classes Qt OpenGL, QOpenGLTimerQuery possède une fonction create() pour créer l'objet OpenGL sous-jacent. Cela permet au développeur de s'assurer qu'il existe un contexte OpenGL valide à ce moment-là.

Une fois créées, les requêtes de temporisation peuvent être émises de plusieurs manières. La méthode la plus simple est de délimiter un bloc de commandes avec des appels à begin() et end(). Ceci demande à OpenGL de mesurer le temps écoulé entre la fin de toutes les commandes émises avant begin() et la fin de toutes les commandes émises avant end().

A la fin d'une image, nous pouvons récupérer les résultats en appelant waitForResult(). Comme le nom de cette fonction l'indique, elle bloque l'exécution du CPU jusqu'à ce qu'OpenGL notifie que le résultat de la requête est disponible. Pour éviter le blocage, vous pouvez vérifier si le résultat de la requête est disponible en appelant isResultAvailable(). Notez que les GPUs modernes sont profondément pipelinés et que les résultats des requêtes peuvent ne pas être disponibles avant 1 à 5 images après qu'elles aient été émises.

Notez qu'OpenGL ne permet pas l'imbrication ou l'entrelacement de plusieurs requêtes de temporisation en utilisant begin() et end(). L'utilisation de plusieurs requêtes de temporisation et de recordTimestamp() permet d'éviter cette limitation. Lorsque vous utilisez recordTimestamp(), le résultat peut être obtenu ultérieurement en utilisant isResultAvailable() et waitForResult(). Qt Help 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'adresse parent. Vous devez appeler create() avec un contexte OpenGL valide avant de l'utiliser.

[virtual noexcept] QOpenGLTimerQuery::~QOpenGLTimerQuery()

Détruit le site QOpenGLTimerQuery et la ressource OpenGL sous-jacente.

void QOpenGLTimerQuery::begin()

Marque le point de départ dans la file d'attente des commandes OpenGL pour une séquence de commandes à chronométrer par cet objet de requête.

Ceci est utile pour des cas d'utilisation simples. En général, il est préférable d'utiliser recordTimestamp().

Voir aussi end(), isResultAvailable(), waitForResult(), et recordTimestamp().

bool QOpenGLTimerQuery::create()

Crée l'objet de requête OpenGL timer sous-jacent. Il doit y avoir un contexte OpenGL valide qui supporte les objets de requête pour que cette fonction réussisse.

Retourne true si l'objet de requête de la minuterie OpenGL a été créé avec succès.

void QOpenGLTimerQuery::destroy()

Détruit l'objet de requête de temporisation OpenGL sous-jacent. Le contexte en cours lors de l'appel de create() doit être en cours 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 à chronométrer par cet objet de requête.

Ceci est utile pour des cas d'utilisation simples. En général, il est préférable d'utiliser recordTimestamp().

Voir aussi begin(), isResultAvailable(), waitForResult(), et recordTimestamp().

bool QOpenGLTimerQuery::isCreated() const

Renvoie true si l'objet de requête OpenGL sous-jacent a été créé. Si true est renvoyé et que le contexte OpenGL associé est actif, vous pouvez alors émettre des requêtes avec cet objet.

bool QOpenGLTimerQuery::isResultAvailable() const

Retourne true si le résultat de la requête OpenGL timer est disponible.

Cette fonction n'est pas 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 aussi 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 pour le GPU afin d'enregistrer l'heure à laquelle ce marqueur est atteint par le GPU. Cette fonction n'est pas bloquante et le résultat sera disponible ultérieurement.

La disponibilité du résultat peut être vérifiée avec isResultAvailable(). Le résultat peut être récupéré avec waitForResult() qui bloquera si le résultat n'est pas encore disponible.

Voir aussi waitForResult(), isResultAvailable(), begin() et end().

GLuint64 QOpenGLTimerQuery::waitForResult() const

Renvoie le résultat de la requête du timer OpenGL.

Cette fonction bloquera jusqu'à ce que le résultat soit rendu disponible par OpenGL. Il est recommandé d'appeler isResultAvailable() pour s'assurer que le résultat est disponible afin d'éviter tout blocage inutile.

Voir aussi isResultAvailable().

GLuint64 QOpenGLTimerQuery::waitForTimestamp() const

Renvoie l'horodatage actuel du GPU lorsque toutes les commandes OpenGL précédemment émises ont été reçues mais pas nécessairement exécutées par le GPU.

Cette fonction se bloque jusqu'à ce que le résultat soit renvoyé.

Voir aussi 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.