QOpenGLTimeMonitor Class
QOpenGLTimeMonitorクラスは、一連のOpenGLタイマークエリーオブジェクトをラップします。もっと詳しく...
ヘッダー | #include <QOpenGLTimeMonitor> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
qmake: | QT += opengl |
継承: | QObject |
- 継承メンバを含む全メンバのリスト
- QOpenGLTimeMonitorは、Rendering in 3D に含まれています。
パブリック関数
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 |
詳細な説明
QOpenGLTimeMonitorクラスは、レンダリングアプリケーションが必要とする粒度のGPU上の時間間隔を測定するために使用されるOpenGLタイマークエリオブジェクトのコレクションの便利なラッパーです。
OpenGLタイマークエリオブジェクトは、レンダリングコードの関心のある位置でGPUタイムスタンプを記録するために、順番にクエリされます。すべてのタイマークエリーの結果が利用可能になると、結果をフェッチすることができ、QOpenGLTimerMonitorがあなたのために記録された時間間隔を計算します。
このクラスの典型的な使用例は、アプリケーションのレンダリングアルゴリズムをプロファイリングするか、動的なパフォーマンス/品質バランスをとるためにリアルタイムでアルゴリズムを調整することです。
レンダリング関数でQOpenGLTimeMonitorを使用する前に、setSamples()を呼び出して、記録したいサンプルポイントの必要数を設定する必要があります。N個のサンプルポイントを測定すると、N-1個の時間間隔が生成されることに注意してください。サンプルポイントの数を設定したら、有効な現在のOpenGLコンテキストでcreate ()関数を呼び出して、必要なクエリー・タイマー・オブジェクトを作成します。これらの手順は、通常、初期化関数の中で一度だけ実行されます。
recordSample ()関数を使用して、時間を合わせたいOpenGLコマンドを含むコードのブロックを区切ります。isResultAvailable() を使って、結果のタイムサンプルと時間間隔の可用性をチェックできます。計算された時間間隔と生のタイムスタンプサンプルは、それぞれブロック関数waitForIntervals() とwaitForSamples() で取得できます。
resetこの関数は、キャッシュされた結果をクリアし、タイマーインデックスを最初のタイマーオブジェクトにリセットします。
QOpenGLTimerQueryも参照してください 。
メンバ関数ドキュメント
[explicit]
QOpenGLTimeMonitor::QOpenGLTimeMonitor(QObject *parent = nullptr)
与えられたparent で QOpenGLTimeMonitor インスタンスを作成します。使用する前に、有効なOpenGLコンテキストでcreate() を呼び出す必要があります。
setSampleCount() およびcreate()も参照してください 。
[virtual noexcept]
QOpenGLTimeMonitor::~QOpenGLTimeMonitor()
QOpenGLTimeMonitor とその下にある OpenGL リソースを破棄します。
bool QOpenGLTimeMonitor::create()
sampleCount() OpenGLタイマークエリオブジェクトをインスタンス化する。このオブジェクトは、recordSample() を連続して呼び出す間に、OpenGLコマンドの実行にかかった時間を追跡するために使用される。
OpenGLタイマークエリオブジェクトを作成できた場合は、true
。
destroy()、setSampleCount()、recordSample()も参照してください 。
void QOpenGLTimeMonitor::destroy()
このインスタンス内で使用されているOpenGLタイマークエリオブジェクトを破棄します。
create()も参照してください 。
bool QOpenGLTimeMonitor::isCreated() const
基礎となるOpenGLクエリー・オブジェクトが作成されていれば、true
。これがtrue
を返し、関連するOpenGLコンテキストが現在のものであれば、このオブジェクトでタイムサンプルを記録することができます。
bool QOpenGLTimeMonitor::isResultAvailable() const
OpenGLタイマークエリの結果が利用可能な場合、true
を返す。
waitForSamples() およびwaitForIntervals()も参照してください 。
QList<GLuint> QOpenGLTimeMonitor::objectIds() const
OpenGLタイマークエリオブジェクトのオブジェクトIDを含むQList 。
int QOpenGLTimeMonitor::recordSample()
OpenGLコマンドキューのこのポイントでOpenGLタイマークエリーを発行します。アプリケーションのレンダリング関数でこの関数を連続して呼び出すと、この関数を連続して呼び出す間のOpenGLコマンドの実行にかかったGPU時間の詳細が蓄積されます。
setSampleCount(),isResultAvailable(),waitForSamples(),waitForIntervals()も参照してください 。
void QOpenGLTimeMonitor::reset()
別のフレームのレンダリングで使用できるように、時間モニターをリセットします。前の結果を取得した後、次のフレームで初めてrecordSample() を呼び出す前にこれを呼び出します。
recordSample()も参照 。
int QOpenGLTimeMonitor::sampleCount() const
setSampleCount() で要求されたサンプル点の数を返す。setSampleCount() に続いて create が正常に呼び出された場合、返される値は、実際に使用できるサンプル・ポイント数になります。
サンプル・カウントのデフォルト値は 2 であり、1 つの区間の測定になります。
setSampleCount()も参照 。
void QOpenGLTimeMonitor::setSampleCount(int sampleCount)
サンプルポイント数をsampleCount に設定します。この関数でサンプル数を設定した後、create ()を呼び出して、基礎となるOpenGLタイマークエリオブジェクトをインスタンス化する必要があります。
新しいsampleCount は少なくとも 2 でなければなりません。
sampleCount()、create()、recordSample()も参照してください 。
QList<GLuint64> QOpenGLTimeMonitor::waitForIntervals() const
recordSample() の呼び出しによって区切られた時間間隔を含むQList を返す。結果のベクトルは、実際のタイムスタンプサンプルではなく、その間のインターバルを表すため、要素が1つ少なくなります。
この関数は、OpenGLが結果が利用可能であることを示すまでブロックされます。isResultAvailable() を使ってこの関数を呼び出す前に、結果が利用可能かどうかを確認することをお勧めします。
waitForSamples() およびisResultAvailable()も参照してください 。
QList<GLuint64> QOpenGLTimeMonitor::waitForSamples() const
recordSample() で取得した GPU タイムスタンプを含むQList を返します。
この関数は、OpenGLが結果が利用可能であることを示すまでブロックされます。この関数をisResultAvailable() で呼び出す前に、結果が利用可能かどうかを確認することをお勧めします。
注意: この関数は、OpenGL >=3.3またはARB_timer_query拡張を持つシステムでのみ動作します。詳細はQOpenGLTimerQuery を参照。
waitForIntervals() および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.