QOpenGLTimerQuery Class
QOpenGLTimerQueryクラスは、OpenGLタイマークエリオブジェクトをラップします。さらに...
ヘッダー | #include <QOpenGLTimerQuery> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
qmake: | QT += opengl |
継承: | QObject |
- 継承メンバを含む全メンバのリスト
- QOpenGLTimerQueryは、Rendering in 3D に含まれています。
パブリック関数
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 |
詳細説明
OpenGLタイマークエリーオブジェクトは、GPU上のOpenGLコマンドシーケンスの実行時間を測定するためのOpenGL管理リソースです。
OpenGLは、OpenGLのバージョンとARB_timer_queryまたはEXT_timer_query拡張の有無によって、さまざまなレベルのタイマークエリーをサポートしています。サポートをまとめると次のようになります:
- OpenGL >=3.3は、すべてのタイマークエリー機能をフルサポートしています。
- ARB_timer_query拡張を持つOpenGL 3.2は、すべてのタイマークエリー機能をフルサポートします。
- OpenGL <=3.2 with the EXT_timer_query extension(EXT_timer_query拡張付きOpenGL 3.2)は、GPUのタイムスタンプをクエリできないという限定的なサポートを提供します。Qtクラスが提供する関数に影響を与える場所は、関数のドキュメントで強調表示されます。
- OpenGL ES 2(および OpenGL ES 3)は、OpenGL タイマークエリーをサポートしていません。
OpenGLは1ナノ秒(1e-9秒)の粒度で時間を表現します。この結果、32ビット整数では、可能な時間の合計は約4秒にしかならず、パフォーマンスの悪い操作や長い操作では、これを超えることは難しくありません。そのため、OpenGLは時間を表すのに64ビットの整数型を使います。GLuint64変数は数百年の継続時間を格納するのに十分な幅を持っており、リアルタイムレンダリングのニーズには十分です。
他のQt OpenGL クラスと同様に、QOpenGLTimerQueryにはcreate ()関数があり、基礎となるOpenGLオブジェクトを生成する。これは、開発者がその時点で有効な現在のOpenGLコンテキストがあることを確認できるようにするためです。
一度作成されると、タイマークエリーはいくつかの方法で発行できる。最も単純な方法は、begin ()とend ()の呼び出しでコマンドのブロックを区切ることです。これによりOpenGLは、begin ()の前に発行されたすべてのコマンドが完了してから、end ()の前に発行されたすべてのコマンドが完了するまでの時間を測定するように指示します。
フレームの終わりには、waitForResult ()を呼び出して結果を取得できます。この関数の名前が示すように、OpenGLがタイマークエリの結果が利用可能であることを通知するまで、CPUの実行をブロックします。ブロックを回避するには、isResultAvailable ()を呼び出すことで、クエリ結果が利用可能かどうかを確認できます。最近のGPUは深くパイプライン化されており、クエリー結果が利用可能になるのは、発行されてから1~5フレームの間であることに注意してください。
OpenGLは、begin ()とend ()を使用した複数のタイマークエリの入れ子やインターリーブを許可していないことに注意してください。複数のタイマークエリーとrecordTimestamp() を使用することで、この制限を回避できます。recordTimestamp() を使用する場合は、isResultAvailable() やwaitForResult() を使用して、後で結果を取得することができます。Qt では、複数のクエリ・オブジェクトを使用する際に役立つ便利なクラスQOpenGLTimeMonitor を提供しています。
QOpenGLTimeMonitorも参照してください 。
メンバ関数のドキュメント
[explicit]
QOpenGLTimerQuery::QOpenGLTimerQuery(QObject *parent = nullptr)
与えられたparent で QOpenGLTimerQuery インスタンスを作成します。使用する前に、有効なOpenGLコンテキストでcreate ()を呼び出す必要があります。
[virtual noexcept]
QOpenGLTimerQuery::~QOpenGLTimerQuery()
QOpenGLTimerQuery とその下にある OpenGL リソースを破棄します。
void QOpenGLTimerQuery::begin()
このクエリオブジェクトによってタイムアウトされる一連のコマンドのOpenGLコマンドキューにおける開始点をマークします。
これは単純なユースケースに便利です。通常はrecordTimestamp() を使用する方がよい。
end(),isResultAvailable(),waitForResult(),recordTimestamp()も参照してください 。
bool QOpenGLTimerQuery::create()
基礎となるOpenGLタイマークエリオブジェクトを作成します。この関数が成功するためには、現在のクエリーオブジェクトをサポートする有効なOpenGLコンテキストが存在しなければならない。
OpenGLタイマークエリオブジェクトが正常に作成された場合、true
を返します。
void QOpenGLTimerQuery::destroy()
基礎となる OpenGL タイマークエリオブジェクトを破棄します。この関数を呼び出すときには、create ()が呼び出されたときに現在のコンテキストでなければなりません。
void QOpenGLTimerQuery::end()
このクエリオブジェクトによってタイムアウトされる一連のコマンドのOpenGLコマンドキュー内の終了点をマークします。
これは単純なユースケースに便利です。通常はrecordTimestamp() を使用する方がよい。
begin(),isResultAvailable(),waitForResult(),recordTimestamp()も参照 。
bool QOpenGLTimerQuery::isCreated() const
基礎となるOpenGLクエリオブジェクトが作成されている場合、true
を返します。これがtrue
を返し、関連するOpenGLコンテキストが現在のものであれば、このオブジェクトでクエリーを発行することができます。
bool QOpenGLTimerQuery::isResultAvailable() const
OpenGLタイマークエリ結果が利用可能な場合、true
を返す。
この関数はノンブロッキングであり、理想的には、waitForResult ()を呼び出す前に、クエリ結果が利用可能かどうかをチェックするために使用されるべきである。
waitForResult()も参照 。
GLuint QOpenGLTimerQuery::objectId() const
基礎となるOpenGLクエリオブジェクトのIDを返します。
void QOpenGLTimerQuery::recordTimestamp()
GPUのOpenGLコマンドキューにマーカーを置き、GPUがこのマーカーに到達したときのタイムスタンプを記録します。この関数はノンブロッキングで、結果は後で利用可能になります。
結果の可用性はisResultAvailable() で確認できます。結果はwaitForResult() でフェッチできます。この関数は、結果がまだ利用可能でない場合にブロックします。
waitForResult()、isResultAvailable()、begin()、end()も参照 。
GLuint64 QOpenGLTimerQuery::waitForResult() const
OpenGLタイマークエリの結果を返します。
この関数は、OpenGLによって結果が利用可能になるまでブロックされます。不必要なブロックやストールを避けるために、isResultAvailable ()を呼び出して、結果が利用可能であることを確認することをお勧めします。
isResultAvailable()も参照してください 。
GLuint64 QOpenGLTimerQuery::waitForTimestamp() const
以前に発行されたすべてのOpenGLコマンドがGPUによって実行されたとは限らないが、受信されたときのGPUの現在のタイムスタンプを返します。
この関数は結果が返されるまでブロックします。
recordTimestamp()も参照してください 。
© 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.