QOpenGLTimeMonitor Class
QOpenGLTimeMonitorクラスは、一連のOpenGLタイマークエリーオブジェクトをラップします。詳細...
Header: | #include <QOpenGLTimeMonitor> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
qmake: | QT += opengl |
Inherits: | 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() 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()も参照して ください。
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。