QOpenGLTimeMonitor 类

QOpenGLTimeMonitor 类封装了一系列 OpenGL 计时查询对象。 更多...

头文件 #include <QOpenGLTimeMonitor>
CMakefind_package(Qt6 REQUIRED COMPONENTS OpenGL)
target_link_libraries(mytarget PRIVATE Qt6::OpenGL)
qmakeQT += opengl
继承 QObject

公共函数

QOpenGLTimeMonitor(QObject *parent = nullptr)
虚拟~QOpenGLTimeMonitor()
boolcreate()
voiddestroy()
boolisCreated() const
boolisResultAvailable() const
QList<GLuint>objectIds() const
intrecordSample()
voidreset()
intsampleCount() const
voidsetSampleCount(int sampleCount)
QList<GLuint64>waitForIntervals() const
QList<GLuint64>waitForSamples() const

详细描述

QOpenGLTimeMonitor 类是一个便利包装,封装了一组 OpenGL 计时查询对象,用于测量 GPU 上的时间间隔,以满足你的渲染应用程序所需的最小粒度。

通过顺序查询 OpenGL 计时查询对象来记录你在渲染代码中感兴趣位置处的 GPU 时间戳。一旦所有计时查询的结果都可用,就可以检索结果,QOpenGLTimerMonitor 将为你计算记录的时间间隔。

这个类的典型用途是分析你的应用程序的渲染算法,或者在实时中调整这些算法以平衡动态性能/质量。

在您的渲染函数中使用 QOpenGLTimeMonitor 之前,您应该通过调用 setSamples() 设置您希望记录的必要数量。请注意,测量 N 个样本点将产生 N-1 个时间间隔。一旦您设置了样本点的数量,就用一个有效的当前 OpenGL 上下文调用 create() 函数来创建必要的查询计时对象。这些步骤通常在初始化函数中只执行一次。

使用 recordSample() 函数来定义包含您希望计时 OpenGL 指令的代码块。您可以使用 isResultAvailable() 检查结果时间样本和时间间隔的可用性。使用阻塞函数 waitForIntervals() 和 waitForSamples() 分别检索计算的时间间隔和原始时间戳样本。

在检索结果并在开始新一轮样本采集之前(例如,在下个帧中),务必调用reset()函数,该函数将清除缓存的結果并将计时器索引重置为第一个计时器对象。

另请参阅QOpenGLTimerQuery

成员函数文档

[显式] QOpenGLTimeMonitor::QOpenGLTimeMonitor(QObject *parent = nullptr)

使用给定的parent创建一个QOpenGLTimeMonitor实例。在使用之前,必须使用有效的OpenGL上下文调用create()。

另请参阅setSampleCount()和create

[虚函数,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

另请参阅waitForSampleswaitForIntervals

QList<GLuint> QOpenGLTimeMonitor::objectIds() const

返回包含OpenGL计时器查询对象对象ID的QList

int QOpenGLTimeMonitor::recordSample()

在OpenGL命令队列中的此点发出OpenGL计时器查询。在您的应用程序的渲染函数中按顺序调用此函数,将构建出GPU执行OpenGL命令所需时间的详细信息。

另请参阅setSampleCountisResultAvailablewaitForSampleswaitForIntervals

void QOpenGLTimeMonitor::reset()

重置时间监控器,以便可以在渲染的另一帧中再次使用。在从下一个帧的第一次调用recordSample()之前,获取上次结果并调用一次此方法。

另请参阅recordSample

int QOpenGLTimeMonitor::sampleCount() const

返回使用 setSampleCount() 要求的样本点的数量。如果成功调用 setSampleCount() 后创建,则返回的值将是实际可用的样本点数量。

样本点数的默认值为2,表示测量单个区间。

另请参阅 setSampleCount().

void QOpenGLTimeMonitor::setSampleCount(int sampleCount)

将样本点数设置为 sampleCount。使用此函数设置样本数后,必须调用 create() 以实例化底层 OpenGL 计时查询对象。

新的 sampleCount 必须至少为2。

另请参阅 sampleCount(),create() 和 recordSample().

QList<GLuint64> QOpenGLTimeMonitor::waitForIntervals() const

返回一个包含由调用 recordSample() 定义的时区分隔符的 QList。结果向量将包含一个更少的元素,因为它表示间隔而不是实际的时间戳样本。

此函数将在 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. 本文件包含的文档贡献的版权属于其各自的所有者。本文件提供的文档受免费软件基金会发布的 GNU 自由文档许可证版本 1.3 条款的约束。Qt 和相应的徽标是 The Qt Company Ltd. 在芬兰和/或其他国家的商标。所有其他商标均为其各自所有者的财产。