QOpenGLTimeMonitor Class

Die Klasse QOpenGLTimeMonitor umhüllt eine Reihe von OpenGL-Timer-Abfrageobjekten. Mehr...

Kopfzeile: #include <QOpenGLTimeMonitor>
CMake: find_package(Qt6 REQUIRED COMPONENTS OpenGL)
target_link_libraries(mytarget PRIVATE Qt6::OpenGL)
qmake: QT += opengl
Vererbt: 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

Detaillierte Beschreibung

Die Klasse QOpenGLTimeMonitor ist eine bequeme Hülle für eine Sammlung von OpenGL-Timer-Abfrageobjekten, die zur Messung von Zeitintervallen auf der GPU mit der von Ihrer Rendering-Anwendung benötigten Granularität verwendet werden.

Die OpenGL-Timer-Abfrageobjekte werden nacheinander abgefragt, um die GPU-Zeitstempel an interessanten Positionen in Ihrem Rendering-Code aufzuzeichnen. Sobald die Ergebnisse für alle Timer-Abfragen verfügbar sind, können die Ergebnisse abgerufen werden und QOpenGLTimerMonitor wird die aufgezeichneten Zeitintervalle für Sie berechnen.

Der typische Anwendungsfall für diese Klasse ist entweder die Erstellung eines Profils für die Rendering-Algorithmen Ihrer Anwendung oder die Anpassung dieser Algorithmen in Echtzeit für einen dynamischen Leistungs- und Qualitätsausgleich.

Bevor Sie QOpenGLTimeMonitor in Ihrer Rendering-Funktion verwenden, sollten Sie die erforderliche Anzahl von Abtastpunkten, die Sie aufzeichnen möchten, durch den Aufruf von setSamples() festlegen. Beachten Sie, dass die Messung von N Abtastpunkten zu N-1 Zeitintervallen führt. 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 normalerweise nur einmal in einer Initialisierungsfunktion ausgeführt.

Verwenden Sie die Funktion recordSample(), um Codeblöcke abzugrenzen, die OpenGL-Befehle enthalten, die Sie zeitlich abfragen möchten. Sie können die Verfügbarkeit der resultierenden Zeitproben und Zeitintervalle mit isResultAvailable() überprüfen. Die berechneten Zeitintervalle und die rohen Zeitstempel können mit den blockierenden Funktionen waitForIntervals() bzw. waitForSamples() abgerufen werden.

Rufen Sie nach dem Abrufen der Ergebnisse und vor Beginn einer neuen Runde von Stichproben (z. B. im nächsten Frame) unbedingt die Funktion reset() auf, die die zwischengespeicherten Ergebnisse löscht und den Timer-Index wieder auf das erste Timer-Objekt zurücksetzt.

Siehe auch QOpenGLTimerQuery.

Dokumentation der Mitgliedsfunktionen

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

Erzeugt eine QOpenGLTimeMonitor-Instanz mit dem angegebenen parent. Sie müssen create() mit einem gültigen OpenGL-Kontext aufrufen, bevor Sie es verwenden.

Siehe auch setSampleCount() und create().

[virtual noexcept] QOpenGLTimeMonitor::~QOpenGLTimeMonitor()

Zerstört die QOpenGLTimeMonitor und alle zugrunde liegenden OpenGL-Ressourcen.

bool QOpenGLTimeMonitor::create()

Instanziiert sampleCount() OpenGL-Timer-Abfrageobjekte, die verwendet werden, um die Zeit zu verfolgen, 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()

Zerstört alle OpenGL-Timer-Abfrageobjekte, die in dieser Instanz verwendet werden.

Siehe auch create().

bool QOpenGLTimeMonitor::isCreated() const

Gibt true zurück, wenn die zugrundeliegenden OpenGL-Abfrageobjekte erstellt worden sind. Wenn dies true zurückgibt und der zugehörige OpenGL-Kontext aktuell ist, dann können Sie mit diesem Objekt Zeitproben aufzeichnen.

bool QOpenGLTimeMonitor::isResultAvailable() const

Gibt true zurück, wenn die Ergebnisse der OpenGL-Timer-Abfrage verfügbar sind.

Siehe auch waitForSamples() und waitForIntervals().

QList<GLuint> QOpenGLTimeMonitor::objectIds() const

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

int QOpenGLTimeMonitor::recordSample()

Stellt eine OpenGL-Timer-Abfrage an diesem Punkt der OpenGL-Befehlswarteschlange. Der Aufruf dieser Funktion in einer Sequenz in der Rendering-Funktion Ihrer Anwendung wird Details der GPU-Zeit aufbauen, 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 in einem anderen Frame des Renderings verwendet werden kann. Rufen Sie diese Funktion auf, sobald Sie die vorherigen Ergebnisse erhalten haben und bevor Sie recordSample() zum ersten Mal im nächsten Bild aufrufen.

Siehe auch recordSample().

int QOpenGLTimeMonitor::sampleCount() const

Gibt die Anzahl der Stichprobenpunkte zurück, die mit setSampleCount() angefordert wurden. Wenn create im Anschluss an setSampleCount() erfolgreich aufgerufen wurde, ist der zurückgegebene Wert die tatsächliche Anzahl der Probenahmestellen, die verwendet werden können.

Der Standardwert für sample count ist 2, was zur Messung eines einzigen Intervalls führt.

Siehe auch setSampleCount().

void QOpenGLTimeMonitor::setSampleCount(int sampleCount)

Setzt die Anzahl der Abtastpunkte auf sampleCount. Nachdem Sie die Anzahl der Abtastpunkte mit dieser Funktion festgelegt haben, müssen Sie create() aufrufen, um die zugrundeliegenden OpenGL-Timer-Abfrageobjekte zu instanziieren.

Die neue sampleCount muss mindestens 2 sein.

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

QList<GLuint64> QOpenGLTimeMonitor::waitForIntervals() const

Gibt ein QList zurück, das die Zeitintervalle enthält, die durch die Aufrufe von recordSample() begrenzt werden. Der resultierende Vektor enthält ein Element weniger, da er die dazwischen liegenden Intervalle repräsentiert und nicht die tatsächlichen Zeitstempelproben.

Diese Funktion wird blockiert, bis OpenGL anzeigt, dass die Ergebnisse verfügbar sind. Es wird empfohlen, die Verfügbarkeit des Ergebnisses zu prüfen, bevor Sie diese Funktion mit isResultAvailable() aufrufen.

Siehe auch waitForSamples() und isResultAvailable().

QList<GLuint64> QOpenGLTimeMonitor::waitForSamples() const

Gibt eine QList mit den GPU-Zeitstempeln zurück, die mit recordSample() ermittelt wurden.

Diese Funktion wird blockiert, bis OpenGL anzeigt, dass die Ergebnisse verfügbar sind. Es wird empfohlen, die Verfügbarkeit des Ergebnisses zu prüfen, bevor Sie diese Funktion mit isResultAvailable() aufrufen.

Hinweis: Diese Funktion funktioniert nur auf Systemen, die OpenGL >=3.3 oder die ARB_timer_query Erweiterung haben. Siehe QOpenGLTimerQuery für weitere Details.

Siehe auch waitForIntervals() und isResultAvailable().

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