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は、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() インスタンスを作成します。これは、recordSample() の連続した呼び出しの間に OpenGL コマンドの実行にかかった時間を追跡するために使用される 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()。
© 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.