QOpenGLTimerQuery Class
La clase QOpenGLTimerQuery envuelve un objeto de consulta de temporizador OpenGL. Más...
| Cabecera: | #include <QOpenGLTimerQuery> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL)target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
| qmake: | QT += opengl |
| Hereda: | QObject |
- Lista de todos los miembros, incluyendo los heredados
- QOpenGLTimerQuery es parte de Renderizado en 3D.
Funciones Públicas
| 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 |
Descripción Detallada
Los objetos de consulta de temporizador OpenGL son recursos gestionados por OpenGL para medir los tiempos de ejecución de secuencias de comandos OpenGL en la GPU.
OpenGL ofrece varios niveles de soporte para consultas de temporizador, dependiendo de la versión de OpenGL que tengas y de la presencia de las extensiones ARB_timer_query o EXT_timer_query. El soporte se puede resumir como
- OpenGL >=3.3 ofrece soporte completo para toda la funcionalidad de consulta de temporizador.
- OpenGL 3.2 con la extensión ARB_timer_query ofrece soporte completo para toda la funcionalidad de consulta de temporizador.
- OpenGL <=3.2 con la extensión EXT_timer_query ofrece una compatibilidad limitada, ya que no se puede consultar la marca de tiempo de la GPU. Los lugares en los que esto afecta a las funciones proporcionadas por las clases Qt se resaltarán en la documentación de la función.
- OpenGL ES 2 (y OpenGL ES 3) no proporcionan ningún soporte para las consultas de temporizador de OpenGL.
OpenGL representa el tiempo con una granularidad de 1 nanosegundo (1e-9 segundos). Como consecuencia de esto, los enteros de 32 bits sólo darían una duración total posible de aproximadamente 4 segundos, que no sería difícil de sobrepasar en operaciones de bajo rendimiento o largas. Por ello, OpenGL utiliza tipos enteros de 64 bits para representar los tiempos. Una variable GLuint64 tiene anchura suficiente para contener una duración de cientos de años, lo que es suficiente para las necesidades de renderizado en tiempo real.
Como con las otras clases Qt OpenGL, QOpenGLTimerQuery tiene una función create() para crear el objeto OpenGL subyacente. Esto es para permitir al desarrollador asegurarse de que hay un contexto OpenGL actual valido en ese momento.
Una vez creadas, las consultas de temporizador se pueden emitir de varias maneras. El método más simple es delimitar un bloque de comandos con llamadas a begin() y end(). Esto indica a OpenGL que mida el tiempo transcurrido desde la finalización de todos los comandos emitidos antes de begin() hasta la finalización de todos los comandos emitidos antes de end().
Al final de un fotograma podemos recuperar los resultados llamando a waitForResult(). Como su nombre indica, esta función bloquea la ejecución de la CPU hasta que OpenGL notifica que el resultado de la consulta del temporizador está disponible. Para evitar el bloqueo, puedes comprobar si el resultado de la consulta está disponible llamando a isResultAvailable(). Hay que tener en cuenta que las GPUs modernas están profundamente canalizadas y los resultados de la consulta pueden no estar disponibles hasta 1-5 frames después de haber sido emitidos.
Ten en cuenta que OpenGL no permite anidar o intercalar múltiples consultas de temporizador utilizando begin() y end(). El uso de múltiples consultas de temporizador y recordTimestamp() evita esta limitación. Cuando se utiliza recordTimestamp() el resultado se puede obtener en algún momento posterior utilizando isResultAvailable() y waitForResult(). Qt proporciona la clase de conveniencia QOpenGLTimeMonitor que ayuda con el uso de múltiples objetos de consulta.
Véase también QOpenGLTimeMonitor.
Documentación de las funciones miembro
[explicit] QOpenGLTimerQuery::QOpenGLTimerQuery(QObject *parent = nullptr)
Crea una instancia QOpenGLTimerQuery con la dirección parent. Debes llamar a create() con un contexto OpenGL válido antes de usarlo.
[virtual noexcept] QOpenGLTimerQuery::~QOpenGLTimerQuery()
Destruye la página QOpenGLTimerQuery y el recurso OpenGL subyacente.
void QOpenGLTimerQuery::begin()
Marca el punto de inicio en la cola de comandos OpenGL para una secuencia de comandos que serán cronometrados por este objeto de consulta.
Esto es útil para casos de uso simples. Normalmente es mejor utilizar recordTimestamp().
Véase también end(), isResultAvailable(), waitForResult(), y recordTimestamp().
bool QOpenGLTimerQuery::create()
Crea el objeto de consulta de temporizador OpenGL subyacente. Debe haber un contexto OpenGL válido que soporte objetos de consulta actuales para que esta función tenga éxito.
Devuelve true si el objeto de consulta del temporizador OpenGL se ha creado correctamente.
void QOpenGLTimerQuery::destroy()
Destruye el objeto de consulta de temporizador OpenGL subyacente. El contexto que estaba activo cuando se llamó a create() debe estarlo cuando se llame a esta función.
void QOpenGLTimerQuery::end()
Marca el punto final en la cola de comandos de OpenGL para una secuencia de comandos que serán cronometrados por este objeto de consulta.
Esto es útil para casos de uso sencillos. Normalmente es mejor utilizar recordTimestamp().
Véase también begin(), isResultAvailable(), waitForResult(), y recordTimestamp().
bool QOpenGLTimerQuery::isCreated() const
Devuelve true si se ha creado el objeto de consulta OpenGL subyacente. Si devuelve true y el contexto OpenGL asociado es actual, podrá realizar consultas con este objeto.
bool QOpenGLTimerQuery::isResultAvailable() const
Devuelve true si el resultado de la consulta del temporizador OpenGL está disponible.
Esta función no es de bloqueo e idealmente debería utilizarse para comprobar la disponibilidad del resultado de la consulta antes de llamar a waitForResult().
Véase también waitForResult().
GLuint QOpenGLTimerQuery::objectId() const
Devuelve el id del objeto de consulta OpenGL subyacente.
void QOpenGLTimerQuery::recordTimestamp()
Coloca un marcador en la cola de comandos OpenGL para que la GPU registre la marca de tiempo cuando la GPU alcanza este marcador. Esta función no es de bloqueo y el resultado estará disponible en algún momento posterior.
La disponibilidad del resultado puede comprobarse con isResultAvailable(). El resultado puede obtenerse con waitForResult(), que se bloqueará si aún no está disponible.
Véase también waitForResult(), isResultAvailable(), begin() y end().
GLuint64 QOpenGLTimerQuery::waitForResult() const
Devuelve el resultado de la consulta del temporizador OpenGL.
Esta función se bloqueará hasta que el resultado esté disponible por OpenGL. Se recomienda llamar a isResultAvailable() para asegurarse de que el resultado está disponible y evitar bloqueos innecesarios.
Véase también isResultAvailable().
GLuint64 QOpenGLTimerQuery::waitForTimestamp() const
Devuelve la marca de tiempo actual de la GPU cuando todos los comandos OpenGL emitidos previamente han sido recibidos pero no necesariamente ejecutados por la GPU.
Esta función se bloquea hasta que se devuelve el resultado.
Véase también 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.