QOpenGLTimeMonitor 类
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) | |
虚拟 | ~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 类是一个便利包装,封装了一组 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
。
另请参阅waitForSamples和waitForIntervals。
QList<GLuint> QOpenGLTimeMonitor::objectIds() const
返回包含OpenGL计时器查询对象对象ID的QList。
int QOpenGLTimeMonitor::recordSample()
在OpenGL命令队列中的此点发出OpenGL计时器查询。在您的应用程序的渲染函数中按顺序调用此函数,将构建出GPU执行OpenGL命令所需时间的详细信息。
另请参阅setSampleCount、isResultAvailable、waitForSamples和waitForIntervals。
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. 在芬兰和/或其他国家的商标。所有其他商标均为其各自所有者的财产。