Auf dieser Seite

QOpenGLTimeMonitor Class

Die Klasse „QOpenGLTimeMonitor“ fasst eine Abfolge von OpenGL-Timer-Abfrageobjekten zusammen. Mehr...

Header: #include <QOpenGLTimeMonitor>
CMake: find_package(Qt6 REQUIRED COMPONENTS OpenGL)
target_link_libraries(mytarget PRIVATE Qt6::OpenGL)
qmake: QT += opengl
Erbt von: QObject

Öffentliche Funktionen

QOpenGLTimeMonitor(QObject *parent = nullptr)
virtual ~QOpenGLTimeMonitor()
bool create()
void destroy()
bool isCreated() const
bool isResultAvailable() const
QList<GLuint> objectIds() const
int recordSample()
void reset()
int sampleCount() const
void setSampleCount(int sampleCount)
QList<GLuint64> waitForIntervals() const
QList<GLuint64> waitForSamples() const

Ausführliche Beschreibung

Die Klasse QOpenGLTimeMonitor ist ein praktischer Wrapper um eine Sammlung von OpenGL-Timer-Abfrageobjekten, die dazu dienen, Zeitintervalle auf der GPU mit der von Ihrer Rendering-Anwendung benötigten Genauigkeit zu messen.

Die OpenGL-Timer-Abfrageobjekte werden nacheinander abgefragt, um die GPU-Zeitstempel an den für Ihren Rendering-Code relevanten Stellen aufzuzeichnen. Sobald die Ergebnisse aller Timer-Abfragen vorliegen, können diese abgerufen werden, und QOpenGLTimeMonitor berechnet die aufgezeichneten Zeitintervalle für Sie.

Ein typischer Anwendungsfall dieser Klasse ist entweder die Profilierung der Rendering-Algorithmen Ihrer Anwendung oder die Anpassung dieser Algorithmen in Echtzeit, um einen dynamischen Ausgleich zwischen Leistung und Qualität zu erzielen.

Bevor Sie QOpenGLTimerMonitor in Ihrer Rendering-Funktion verwenden, sollten Sie die gewünschte Anzahl der zu erfassenden Abtastpunkte durch Aufruf von `setSamples()` festlegen. Beachten Sie, dass die Messung von N Abtastpunkten N-1 Zeitintervalle ergibt. Sobald Sie die Anzahl der Abtastpunkte festgelegt haben, rufen Sie die Funktion ` create()` mit einem gültigen aktuellen OpenGL-Kontext auf, um die erforderlichen Abfrage-Timer-Objekte zu erstellen. Diese Schritte werden in der Regel nur einmal in einer Initialisierungsfunktion ausgeführt.

Verwenden Sie die Funktion ` recordSample()` zur Abgrenzung von Codeblöcken, die OpenGL-Befehle enthalten, deren Ausführungszeit Sie messen möchten. Die Verfügbarkeit der resultierenden Zeitabtastwerte und Zeitintervalle können Sie mit ` isResultAvailable()` überprüfen. Die berechneten Zeitintervalle und die rohen Zeitstempel-Abtastwerte lassen sich jeweils mit den blockierenden Funktionen ` waitForIntervals()` bzw. ` waitForSamples()` abrufen.

Stellen Sie nach dem Abrufen der Ergebnisse und vor dem Start einer neuen Abtastrunde (beispielsweise im nächsten Frame) sicher, die Funktion ` reset()` aufzurufen, die die zwischengespeicherten Ergebnisse löscht und den Timer-Index auf das erste Timer-Objekt zurücksetzt.

Siehe auch „ QOpenGLTimerQuery “.

Dokumentation der Mitgliedsfunktionen

[explicit] QOpenGLTimeMonitor::QOpenGLTimeMonitor(QObject *parent = nullptr)

Erstellt eine QOpenGLTimeMonitor-Instanz mit dem angegebenen parent. Vor der Verwendung müssen Sie create() mit einem gültigen OpenGL-Kontext aufrufen.

Siehe auch ` setSampleCount()` und ` create()`.

[virtual noexcept] QOpenGLTimeMonitor::~QOpenGLTimeMonitor()

Löscht die „ QOpenGLTimeMonitor “ und alle zugehörigen OpenGL-Ressourcen.

bool QOpenGLTimeMonitor::create()

Instanziiert „ sampleCount()“-OpenGL-Timer-Abfrageobjekte, die dazu dienen, die Zeit zu erfassen, die für die Ausführung von OpenGL-Befehlen zwischen aufeinanderfolgenden Aufrufen von „ recordSample()“ benötigt wird.

Gibt ` true ` zurück, wenn die OpenGL-Timer-Abfrageobjekte erstellt werden konnten.

Siehe auch destroy(), setSampleCount() und recordSample().

void QOpenGLTimeMonitor::destroy()

Löscht alle innerhalb dieser Instanz verwendeten OpenGL-Timer-Abfrageobjekte.

Siehe auch ` create()`.

bool QOpenGLTimeMonitor::isCreated() const

Gibt „ true “ zurück, wenn die zugrunde liegenden OpenGL-Abfrageobjekte erstellt wurden. Wenn „ true “ zurückgegeben wird und der zugehörige OpenGL-Kontext aktuell ist, können Sie mit diesem Objekt Zeitmessungen aufzeichnen.

bool QOpenGLTimeMonitor::isResultAvailable() const

Gibt „ true “ zurück, wenn die Ergebnisse der OpenGL-Timer-Abfrage vorliegen.

Siehe auch „ waitForSamples()“ und „ waitForIntervals()“.

QList<GLuint> QOpenGLTimeMonitor::objectIds() const

Gibt ein ` QList ` zurück, das die Objekt-IDs der OpenGL-Timer-Abfrageobjekte enthält.

int QOpenGLTimeMonitor::recordSample()

Führt an dieser Stelle in der OpenGL-Befehlswarteschlange eine OpenGL-Timer-Abfrage durch. Durch den wiederholten Aufruf dieser Funktion in der Rendering-Funktion Ihrer Anwendung lassen sich Details zur GPU-Zeit erfassen, die für die Ausführung der OpenGL-Befehle zwischen aufeinanderfolgenden Aufrufen dieser Funktion benötigt wird.

Siehe auch setSampleCount(), isResultAvailable(), waitForSamples() und waitForIntervals().

void QOpenGLTimeMonitor::reset()

Setzt den Zeitmonitor zurück, damit er im nächsten Render-Frame wieder einsatzbereit ist. Rufen Sie diese Funktion auf, sobald Sie die vorherigen Ergebnisse erhalten haben und bevor Sie im nächsten Frame zum ersten Mal „ recordSample()“ aufrufen.

Siehe auch ` recordSample()`.

int QOpenGLTimeMonitor::sampleCount() const

Gibt die Anzahl der Abtastpunkte zurück, die mit ` setSampleCount()` angefordert wurden. Wenn der Aufruf von `create` im Anschluss an ` setSampleCount()` erfolgreich war, entspricht der zurückgegebene Wert der tatsächlichen Anzahl der Abtastpunkte, die verwendet werden können.

Der Standardwert für die Anzahl der Abtastpunkte ist 2, was zur Messung eines einzelnen Intervalls führt.

Siehe auch ` setSampleCount()`.

void QOpenGLTimeMonitor::setSampleCount(int sampleCount)

Legt die Anzahl der Abtastpunkte auf „ sampleCount “ fest. Nachdem Sie die Anzahl der Abtastpunkte mit dieser Funktion festgelegt haben, müssen Sie „ create()“ aufrufen, um die zugrunde liegenden OpenGL-Timer-Abfrageobjekte zu instanziieren.

Der neue Wert für „ sampleCount “ muss mindestens 2 betragen.

Siehe auch sampleCount(), create() und recordSample().

QList<GLuint64> QOpenGLTimeMonitor::waitForIntervals() const

Gibt einen ` QList ` zurück, der die durch die Aufrufe von ` recordSample()` abgegrenzten Zeitintervalle enthält. Der resultierende Vektor enthält ein Element weniger, da er die dazwischenliegenden Intervalle und nicht die tatsächlichen Zeitstempelwerte darstellt.

Diese Funktion blockiert, bis OpenGL anzeigt, dass die Ergebnisse verfügbar sind. Es wird empfohlen, die Verfügbarkeit des Ergebnisses vor dem Aufruf dieser Funktion mit ` isResultAvailable()` zu überprüfen.

Siehe auch „ waitForSamples()“ und „ isResultAvailable()“.

QList<GLuint64> QOpenGLTimeMonitor::waitForSamples() const

Gibt ein ` QList ` zurück, das die mit ` recordSample()` erfassten GPU-Zeitstempel enthält.

Diese Funktion blockiert, bis OpenGL anzeigt, dass die Ergebnisse verfügbar sind. Es wird empfohlen, vor dem Aufruf dieser Funktion mit ` isResultAvailable()` die Verfügbarkeit des Ergebnisses zu prüfen.

Hinweis: Diese Funktion funktioniert nur auf Systemen mit OpenGL >= 3.3 oder der Erweiterung ARB_timer_query. Weitere Details finden Sie unter „ QOpenGLTimerQuery “.

Siehe auch „ waitForIntervals()“ und „ isResultAvailable()“.

© 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.